#include<stdio.h>
int n,vis[100]={0},sub[200]={0},add[200]={0},ans=0;
void dfs(int i){
int j;
if(i==n+1){
ans++;
return;
}
for(j=1;j<=n;j++)
if(!vis[j]&&!sub[i-j+100]&&!add[i+j]){
vis[j]=sub[i-j+100]=add[i+j]=1;
dfs(i+1);
sub[i-j+100]=add[i+j]=vis[j]=0;
}
}
int main(){
scanf("%d",&n);
dfs(1);
printf("%d\n",ans);
return 0;
}
int n,vis[100]={0},sub[200]={0},add[200]={0},ans=0;
void dfs(int i){
int j;
if(i==n+1){
ans++;
return;
}
for(j=1;j<=n;j++)
if(!vis[j]&&!sub[i-j+100]&&!add[i+j]){
vis[j]=sub[i-j+100]=add[i+j]=1;
dfs(i+1);
sub[i-j+100]=add[i+j]=vis[j]=0;
}
}
int main(){
scanf("%d",&n);
dfs(1);
printf("%d\n",ans);
return 0;
}