#include <iostream>
#include <string>
#include <map>

using namespace std;

int res[20];
int lie[20];
int zheng[30];
int ni[30];

int AllRes[] = {15863724,16837425,17468253,17582463,24683175,25713864,25741863,26174835,26831475,27368514,27581463,28613574,31758246,
              35281746,35286471,35714286,35841726,36258174,36271485,36275184,36418572,36428571,36814752,36815724,36824175,37285146,
              37286415,38471625,41582736,41586372,42586137,42736815,42736851,42751863,42857136,42861357,46152837,46827135,46831752,
              47185263,47382516,47526138,47531682,48136275,48157263,48531726,51468273,51842736,51863724,52468317,52473861,52617483,
              52814736,53168247,53172864,53847162,57138642,57142863,57248136,57263148,57263184,57413862,58413627,58417263,61528374,
              62713584,62714853,63175824,63184275,63185247,63571428,63581427,63724815,63728514,63741825,64158273,64285713,64713528,
              64718253,68241753,71386425,72418536,72631485,73168524,73825164,74258136,74286135,75316824,82417536,82531746,83162574,84136275};

/*
void dfs(int step){
    if(到达目的地){
        输出解
        返回
    }
    剪枝(可选)
    for(int i=0;i<枚举数;i++){
        if(满足条件){
            更新状态
            dfs(step+1)
            恢复状态
        }
    }
}
*/

void dfs(int step, int n){
//    if (step == n){
//        for (int i = 0; i < n; ++i) {
//            cout<<res[i]+1;
//        }
//        cout<<endl;
//    }

    for (int j = 0; j < n; ++j) {
        if (!(lie[j] || ni[j+step] || zheng[j-step+n])){
            res[step] = j;

            lie[j] = 1;
            zheng[j-step+n] = 1;
            ni[j+step] = 1;

            dfs(step+1,n);

            lie[j] = 0;
            zheng[j-step+n] = 0;
            ni[j+step] = 0;
        }
    }
}

int main(){
    int x;
    dfs(0,8);
    while (cin>>x){
        cout<<AllRes[x-1]<<endl;
    }

    return 0;
}