#include<stdio.h>
int n,ans,last[10][10],vis[10][10];//last数组记录此位置可走格子数
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int in(int x, int y) {
return x>=1&&x<=n&&y>=1&&y<=n;
}
void dfs(int x,int y,int d) {
vis[x][y]=1;
if(x==n&&y==1) {
if(d==n*n) ans++;
vis[x][y]=0;
return;
}
int p=0,pi;
for(int i=0;i<4;i++) {
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(in(tx,ty)&&!vis[tx][ty]) {
last[tx][ty]--;
if(last[tx][ty]==1){//必须走这个格子
p=1;pi=i;
}
}
}
if(p==1) {
int tx=x+dir[pi][0];
int ty=y+dir[pi][1];
dfs(tx,ty,d+1);
}
else if(p==0) {
for(int i=0;i<4;i++) {
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(in(tx,ty)&&!vis[tx][ty]) {
dfs(tx,ty,d+1);
}
}
}
vis[x][y]=0;
for(int i=0;i<4;i++) {
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(in(tx,ty)&&!vis[tx][ty]) {
last[tx][ty]++;
}
}
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if((i==1||i==n)&&(j==1||j==n)) last[i][j]=2;
else if(i==1||i==n||j==1||j==n) last[i][j]=3;
else last[i][j]=4;
}
}
last[n][1]++;//终点便于统一处理
dfs(1,1,1);
printf("%d",ans);
return 0;
}