#include <queue>
#include <math.h>
#include <stack>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string.h>
#include <algorithm>
using namespace std;
#define int long long
const int N = 1000 + 10;
const int INF = 0x3f3f3f3f;
int cnt=0;
int f[N],flag[N],z[N];
int a[N];
int n;
void dfs(int step)
{
if(step>n)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
cnt++;
return;
}
for(int i=1;i<=n;i++)
{
if(flag[i])
{
continue;
}
if(z[i+n-step])
{
continue;
}
if(f[i+step])
{
continue;
}
flag[i]=z[i+n-step]=f[i+step]=true;
a[step]=i;
dfs(step+1);
flag[i]=z[i+n-step]=f[i+step]=false;
}
}
signed main()
{
cin>>n;
dfs(1);
cout<<cnt<<endl;
return 0;
}