可达鸭超人放置跳棋
#include<iostream>
using namespace std;
const int N=1010;
int n;
long long ans;
void dfs(int x,int col,int ys,int zs){
if(x==n+1){
ans++;
return;
}
int s=((1<<n)-1)&(~(col|ys|zs));
int t;
while(s){
t=s&(-s);
dfs(x+1,col+t,(ys+t)<<1,(zs+t)>>1);
s-=t;
}
}
int main(){
while(cin>>n){
ans=0;
dfs(1,0,0,0);
cout<<ans<<endl;
}
return 0;
}