#include<bits/stdc++.h>
#include<stack>
using namespace std;
int n,c,num=0;
int a[10];
stack <int>stk;
int ed[20][20]={0};
void panduan(int d,int b)
{
c=1;
for(int j=1;j<=n;j++)
{
if(ed[d][j]==1) c=0;
else if(ed[j][b]==1) c=0;
else if(ed[d+j][b+j]==1) c=0;
if(b>j)
{
if(ed[d+j][b-j]==1) c=0;
}
if(d>j)
{
if(ed[d-j][b+j]==1) c=0;
}
if(d>j&&b>j)
{
if(ed[d-j][b-j]==1) c=0;
}
if(c==0)break;
}
return ;
}
void chuzhan() //把栈里存的数都给输出出来
{
while(!stk.empty())
{
for(int i=1;i<=n;i++)
{
a[i]=stk.top();
stk.pop();
}
}
for(int i=1;i<=n;i++) //倒叙出栈
{
cout<<a[n-i+1]<<" ";
stk.push(a[n-i+1]);
}
cout<<endl;
}
void huanghou(int d,int b) //运用递归,把下一个数给找到
{
panduan(d,b);
if(c==1)
{
ed[d][b]=1;
stk.push(b);
if (stk.size()==n){
num++;
if (num<=3) chuzhan();
ed[d][b]=0;
stk.pop();
return ;
}
for(int i=1;i<=n;i++)
{
huanghou(d+1,i); //从这里跳出来,会继续往下进行
}
ed[d][b]=0;
stk.pop();
}
return ;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
huanghou(1,i);
}
printf("%d",num);
return 0;
}