//BUGSBUNNY
//IIT ROORKEE

#include<bits/stdc++.h>
using namespace std; 
#define int long long
#define ll long long
#define double long double
#define ld long double
#define endl '\n'
#define vi vector<int>
#define vvi vector<vi>
#define vs vector<string>
#define vl vector<long long>
#define vpii vector<pii>
#define vpipii vector<pipii>
#define vb vector<bool>
#define pb push_back
#define pob pop_back
#define gcd __gcd
#define mp make_pair
#define pii pair<int,int>
#define pipii pair<int,pii>
#define piipi pair<pii,int>
#define pld pair<long double,long double>
// #define mod 1000000007
#define mod 1000000000 
// #define mod 998244353
#define rep(i,n) for (ll i = 0; i < n; i++)
#define repp(i,a,b) for(ll i = a ; i<b ; i++)
#define reppr(i,a,b) for(ll i = a-1 ; i>=b ; i--)
#define repr(i,n) for (ll i = n - 1; i >= 0; i--)
#define ff first
#define ss second
#define pc putchar_unlocked
#define gc getchar_unlocked
#define inf 9223372036854775807
#define infn -9223372036854775807
#define pi 3.14159265358979323846
#define eps 0.0000000001
#define sp << " " << 
#define setprec(x) cout << fixed << setprecision(x);
#define reve(a) reverse(all(a));
#define SORT(a) sort(all(a));
#define all(n) n.begin(),n.end()

//Modular Exponentiation
    int powmod(int x,int y) 
    { 
        if (y == 0) return 1; 
        int p = powmod(x, y/2) % mod; 
        p = (p * p) % mod;   
        return (y%2 == 0)? p : (x * p) % mod; 
    }

//modInverse
    int modInverse(int a) 
    { 
       return powmod(a,mod-2); 
    }

//Binomial Coefficients
    // int fact[200010], factinv[200010];
    // int nCr(int n , int r)
    // {
    //     return ((fact[n] * modInverse(fact[n-r]) % mod * modInverse(fact[r]))%mod) ;
    // }


void solve();

signed main()
{
    //-------------------------------------------------------------------------------
        
        ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
        clock_t clk = clock();

    //-------------------------------------------------------------------------------

        // fact[0] = 1 , factinv[0] = 1;
        // repp(i,1,200010)
        // {
        //     fact[i] = (fact[i-1] * i)%mod;
        //     factinv[i] = (factinv[i-1] * modInverse(i))%mod;
        // }
        
    //-------------------------------------------------------------------------------
        int t = 1;
        // cin >> t;
        while(t--)
            solve();
        clk = clock() - clk;
        cerr << fixed << setprecision(6) << "Time: " << ((double)clk)/CLOCKS_PER_SEC << endl;
    //-------------------------------------------------------------------------------
}

void solve()
{
    int k;
    cin >> k;
    string s = "1";
    rep(i,k-1)
    {
        int l = s.length() , flag = 0;
        reppr(j,l,1)
        {
            if(s[j]==(s[j-1]+1))
                continue;
            else if(s[j]=='9')
                continue;
            else
            {
                // cout << j << endl;
                flag = 1 , s[j] = (char)(s[j] + 1);
                repp(k,j+1,l)
                {
                    if(s[k-1]=='0')
                        s[k] = '0';
                    else
                        s[k] = (char)(s[k-1] - 1);
                }
            }
            if(flag)
                break;
        }
        if(flag==0 && s[0]=='9')
        {
            s = "1" + string(l,'0');
            // cout << s << endl;
        }
        else if(flag==0)
        {
            s[0] = (char)(s[0]+1);
            repp(j,1,l)
            {
                if(s[j-1]=='0')
                    s[j] = '0';
                else
                    s[j] = s[j-1] - 1;
            }
        }
       // cout << s << endl;
    }
    cout << s << endl;

} 

Measured memory_bytes: 256