#include <iostream>
#include <stack>
using namespace std;

//输出条件:(int row, int col, int str_num),str_num == b时输出
//DFS条件:b[i][j]对应(i,k), (k,j), (i+k,j+k)均无皇后,则摆放,否则j++
//列数从小到大开始试,则结果亦为从小到大的逆序串
int visited[8][8];
int str_num = 0, b, finish = 0;
stack<int> stk; //保存当前皇后串列号

int CheckCollsion(int row, int col){
    for(int k=0; k<8; ++k){ //列冲突
        if(visited[k][col]) return 1;
    }

    for(int k=0; col+k<8&&row+k<8; ++k){ //主对角线向下冲突
        if(visited[row+k][col+k]) return 1;
    }

    for(int k=0; row-k>=0&&col-k>=0; ++k){ //主对角线向上冲突
        if(visited[row-k][col-k]) return 1;
    }

    for(int k=0; row+k<8&&col-k>=0; ++k){ //副对角线向下冲突
        if(visited[row+k][col-k]) return 1;
    }

    for(int k=0; row-k>=0&&col+k<8; ++k){ //副对角线向上冲突
        if(visited[row-k][col+k]) return 1;
    }

    return 0; //不冲突
}

void DFS(int row){
    if(row == 8){ //找到一个皇后串
        str_num ++;
        if(str_num == b) finish = 1; //是所求的b个串,则结束DFS
        return;
    }

    //剪枝
    int j;
    for(j=0; j<8; ++j){
        if(!visited[row][j]){ //确保未访问且不吃掉其他皇后
            int flag = CheckCollsion(row, j);
            if(flag == 0){
                visited[row][j] = 1;
                stk.push(j);
                DFS(row+1); //查找下一行皇后位置
                if(!finish){
                    stk.pop();
                    visited[row][j] = 0;
                }
                else return;
            }
        }
    }
    if(j == 8) return; //此路不通,退回上一步
}

int main() {
    cin>>b;
    DFS(0);
    stack<int> res;
    while (!stk.empty()) {
        int i = stk.top();
        i += 1;
        res.push(i);
        stk.pop();
    }
    while (!res.empty()) {
        cout<<res.top();
        res.pop();
    }
    return 0;
}