#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;
    }
}