#include<stdio.h>
#include<iostream>
using namespace std;
int set[14][14]; //定义棋盘
int a[15];
int count=0;
int m;
void init(int n){
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++)
{
set[i][j]=0;
}
a[i]=0;
}
}
bool check(int row,int column){
for(int i=row-1;i>=1;i--){
if(set[i][column]!=0)
return false;
}
for(int i=row-1,j=column-1;i>=1&&j>=1;i--,j--){
if(set[i][j]!=0)
return false;
}
for(int i=row-1,j=column+1;i>=1&&j<=m;i--,j++)
{
if(set[i][j]!=0){
return false;
}
}
return true;
}
void put(int row){
if(row>m)
{
count++;
if(count<=3)
{
for(int i=0;i<m;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
return;
}
for(int i=1;i<=m;i++)
{
if(set[row][i]==0){
if(check(row,i))
{
set[row][i]=i;
a[row-1]=i;
put(row+1);
a[row-1]=0;
set[row][i]=0;
}
}
}
return ;
}
int main(){
scanf("%d",&m);
init(m);
put(1);
printf("%d\n",count);
return 0;
}