bool is_ok(int hang, int lie)
{
cnt++;
for (int i = 1; i <= n; i++)
{
if (map[i][lie] || map[hang][i])
return false;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (hang - lie == i - j && map[i][j]==1 || hang + lie == i + j && map[i][j] == 1)
{
return false;
}
}
}
return true;
}
#include<iostream>
using namespace std;
int mark_line[10];
int sum=0;
int N;
bool can(int x,int y)
{
for(int i=1;i<x;i++)
{
if( y ==mark_line[i] )
return false;
if( (x-i) == (y-mark_line[i]) )
return false;
if( (x-i)+ (y-mark_line[i])==0)
return false;
}
}
void f(int i)
{
if(i==N+1)
{
sum++;
return ;
}
for(int j=1;j<=N;j++)
{
if(can(i,j))
{
mark_line[i] = j;
f(i+1);
mark_line[i]=0;
}
}
}
int main()
{
cin>>N;
memset(mark_line,0,sizeof(mark_line));
f(1);
cout<<sum<<endl;
return 0;
}