#include <bits/stdc++.h>
using namespace std;
int x[15]={0};//这个用来表示列不用关系行,因为我们处理时将每行都处理出来了
int n,ans;
int pd(int a)
{
for(int i=1;i<a;i++)
{
//在对角线上
if(abs(a-i)==abs(x[a]-x[i]))
{
return 0;
}
//在同一列上
else if(x[i]==x[a])
{
return 0;
}
}
return 1;
}
void dfs(int a)
{
//1.判断边界情况也就是超出的情况
if(a>n)
{
ans++;
return;
}
//2.尝试每一种可能
for(int i=1;i<=n;i++)
{
x[a]=i;//第a个n皇后放的列数
if(pd(a))//判断这一步能否成立
{
dfs(a+1);//可以的话就放置下一个皇后
}
else
continue;//不可以的话跳到下一个循环
}
}
int main()
{
cin>>n;
dfs(1);//放置第一个n皇后
cout<<ans<<endl;
return 0;
}