#include<iostream>
using namespace std;
int n;
long limitrow;
int sum;
/*
row:当前因为列不能添入皇后的位置
left:当前因为左对角线不能填入皇后的位置
right:当前因为右对角线不能填入皇后的位置
*/
void solve(long row,long left,long right){
long pos;
if(row!=limitrow){
pos = limitrow & (~(row|left|right));
while(pos){
long ppos = pos & ~(pos-1);//计算pos最后一个1的位置
solve(row|ppos,(left<<1)|(ppos<<1),(right>>1)|(ppos>>1));
pos = pos - ppos;//把刚刚代入的1的位置消去
}
}else sum++;
}
int main(){
cout << "输入n个皇后(1~32):";
cin >> n;
limitrow = (1<<n) -1;
solve(0,0,0);
cout<<sum;
}