#include <iostream> #include <cstring> #include <vector> #include <algorithm> using namespace std; vector<string> store; bool queeneat(int i,int j,int m,int n){//(i,j)是否会吃掉(m,n) if(i==m || j==n) return false; int k; for(k=1;(i+k)<9 && (j+k)<9;k++){ if((i+k)==m && (j+k)==n) return false;//false即会吃掉 } for(k=1;(i-k)>0 && (j-k)>0;k++){ if((i-k)==m && (j-k)==n) return false; } for(k=1;(i-k)>0 && (j+k)<9;k++){ if((i-k)==m && (j+k)==n) return false; } for(k=1;(i+k)<9 && (j-k)>0;k++){ if((i+k)==m && (j-k)==n) return false; } return true; } bool qjudge(int m,int n,string pre){//(m,n)在前缀下是否有效 for(int i=0;i<pre.length();i++){ int par=pre[i]-'0';//行和列号,从1开始 int col=i+1; if(!queeneat(par, col, m, n)) return false; } return true; } void EightQ(string pre){ if(pre.length()==8){ store.push_back(pre); return; } bool visit[9]; for(int i=0;i<9;i++) visit[i]=false; visit[0]=true; for(int i=0;i<pre.length();i++){ visit[pre[i]-'0']=true; } int col=pre.length()+1; for(int i=1;i<9;i++){ if(visit[i]) continue; if(qjudge(i,col, pre)){ char ii='0'+i; EightQ(pre+ii); } } } int main() { int n; EightQ(""); sort(store.begin(),store.end()); while(cin>>n){ cout<<store[n-1]<<endl; } }