#include<bits/stdc++.h>
 
///for ordered set///
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/trie_policy.hpp>
///for ordered set///
 
using namespace std;
 
///for ordered set///
//using namespace __gnu_pbds;
//typedef tree< long long int , null_type, less_equal<long long int>, rb_tree_tag,tree_order_statistics_node_update> ordered_set;
///for ordered set///
 
///Compiler Optimizer///
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
///Compiler Optimizer///
 
typedef long long           ll;
typedef unsigned long long  ull;
 
#define sf                  scanf
#define pf                  printf
#define pb                  push_back
#define ppb                 pop_back
#define MP                  make_pair
#define PF                  first
#define PS                  second
#define si(n)               scanf("%d",&n)
#define sii(x,y)            scanf("%d %d",&x,&y)
#define siii(x,y,z)         scanf("%d %d %d",&x,&y,&z)
#define sl(n)               scanf("%lld",&n)
#define sll(x,y)            scanf("%lld %lld",&x,&y)
#define slll(x,y,z)         scanf("%lld %lld %lld",&x,&y,&z)
#define FOR(i,x,y)          for(int i=x;i<y;i++)
#define RFOR(i,x,y)         for(int i=x;i>=y;i--)
#define CLR(arr,val)        memset(arr,val,sizeof arr);
#define vout(v)             for(int ind=0;ind<v.size();ind++){ cout<<v[ind]; if(ind<v.size()-1) cout<<' '; else cout<<endl;}
#define TCL(test,t)         for(test=1;test<=t;test++)
#define READ()              freopen("input.txt", "r", stdin)
#define WRITE()             freopen("output.txt", "w", stdout)
#define fastIO()            {ios_base::sync_with_stdio(false); cin.tie(NULL);}
#define MAXN                1000006
#define MAXP                1000006
#define MOD                 1000000007
#define PI                  acos(-1)

vector<ll>v;

int main(){
    #ifdef ELDUIVEL
        clock_t tStart = clock();
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
    ll num=0;
    bool flag=false;
    set<ll>st;
    for(int i=0;i<9;i++)
    for(int j=max(i-1,0);j<=min(i+1,9)||!i&&j<10;j++)
    for(int k=max(j-1,0);k<=min(j+1,9)||!i&&!j&&k<10;k++)
    for(int l=max(k-1,0);l<=min(k+1,9)||!i&&!j&&!k&&l<10;l++)
    for(int m=max(l-1,0);m<=min(l+1,9)||!i&&!j&&!k&&!l&&m<10;m++)
    for(int n=max(m-1,0);n<=min(m+1,9)||!i&&!j&&!k&&!l&&!m&&n<10;n++)
    for(int o=max(n-1,0);o<=min(n+1,9)||!i&&!j&&!k&&!l&&!m&&!n&&o<10;o++)
    for(int p=max(o-1,0);p<=min(o+1,9)||!i&&!j&&!k&&!l&&!m&&!n&&!o&&p<10;p++)
    for(int q=max(p-1,0);q<=min(p+1,9)||!i&&!j&&!k&&!l&&!m&&!n&&!o&&!p&&q<10;q++)
    for(int r=max(q-1,0);r<=min(q+1,9)||!i&&!j&&!k&&!l&&!m&&!n&&!o&&!p&&!q&&r<10;r++){
        num=i; num=num*10+j; num=num*10+k; num=num*10+l; num=num*10+m;
        num=num*10+n; num=num*10+o; num=num*10+p; num=num*10+q; num=num*10+r;
        st.insert(num);
    }
    for(auto x:st) v.pb(x);
    int n;
    cin>>n;
    cout<<v[n]<<endl;
    #ifdef ELDUIVEL
        fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
    #endif
    return 0;
}


Measured memory_bytes: 11508