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