#include <iostream>
using namespace std;
int n;
int a[15];
int total=0;
int f[15]={0}; //记录列上是否已经有棋子 或者说记录数字是否已经被使用了
int djx1[30]={0},djx2[30]={0}; //记录对角线的重复情况
//对角线1为左上到右下,相同之处为m-i值相同,范围为1-n到n-1
//对角线2为右上到左下,相同之处为m+i值相同,范围为2到2*n
int judge(int m,int i)
{
if(f[i]==0&&djx1[m-i+n]==0&&djx2[m+i]==0)
return 1;
else
return 0;
}
void dfs(int m) //行循环
{
if(m==n+1)
{
if(total<3)
{
for(int i=1;i<=n;i++) cout << a[i] << ' ';
cout << endl;
}
total++;
}
else
{
for(int i=1;i<=n;i++) //列循环
{
if(judge(m,i))
{
a[m]=i;
f[i]=1;
djx1[m-i+n]==1;
djx2[m+i]==1;
dfs(m+1);
f[i]=0;
djx1[m-i+n]==0;
djx2[m+i]==0;
}
}
}
}
int main()
{
cin >> n;
dfs(1); //dfs的形参的含义是待填写的数的行 位置
cout << total;
return 0;
}