/* ID: zhangzz4 PROG: checker LANG: C++ */ #include<stdio.h> #include<time.h> const int N=13; int v[N],cnt,n; int _abs(int a){return a>0?a:-a;} int vv[N],vv2[2*N],vv3[2*N]; void put(int x) { if(!x) return; put(x/10); putchar(x%10+'0'); } int ok(int x,int r) { for(int i=0;i<r;i++) if(v[i]==x||_abs(v[i]-x)==r-i) return 0; return 1; } void dfs(int r) { if(n==r) { cnt++; if(cnt<=3) for(int i=0;i<n;i++) { put(v[i]+1); putchar(i==n-1?'/n':' '); } return ; } for(int i=0;i<n;i++) //if(ok(i,r)) 3600ms if(vv[i]+vv2[n+i-r]+vv3[r+i]==0) //550ms { vv[i]=vv2[n+i-r]=vv3[r+i]=1; v[r]=i; dfs(r+1); vv[i]=vv2[n+i-r]=vv3[r+i]=0; } } int main() { freopen("checker.in","r",stdin); freopen("checker.out","w",stdout); //int cc=clock(); scanf("%d",&n); dfs(0); printf("%d/n",cnt); // printf("%d ms/n",clock()-cc); }