/*
* Problem :: 1174 / 줄어드는 숫자
*
* Kind :: Math
*
* Insight
* - max(줄어드는 숫자) = 9876543210
* + 숫자의 범위를 보니 long 을 써야 겠다
*
* - 총 몇개일려나...?
* + 잘 모르겠다... 일단 다 구해보자
* # 구해보니 1023 개다
* -> 그리 많지 않네...?
*
* Point
* - 줄어드는 숫자를 구할 때 BFS 를 사용해서 구현했다
* + 3 이 있으면,
* => 32 / 31 / 30
* => 321, 320 / 310 / X
* => 3210 / X / X
* => X / X / X
* # 일의자리 숫자를 보고 그 숫자보다 작은 숫자들을 뒤에 붙여주었다
* 코드에서는 따로 sort 할 필요가 없도록
* 붙여주는 숫자가 0 부터 시작하도록 하였다
* (743 => 7430, 7431, 7432)
*/
//
// BOJ
// ver.C++
//
// Created by GGlifer
//
// Open Source
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#define endl '\n'
// Set up : Global Variables
#define MAX 9876543210
// Set up : Functions Declaration
/* None */
int main()
{
// Set up : I/O
ios::sync_with_stdio(false);
cin.tie(nullptr);
// Set up : Input
int N; cin >> N;
// Process
vector<long> desc; /* 줄어드는 숫자가 저장될 Vector */
queue<long> que;
for (int i=0; i<=9; i++) { /* Queue 초기화 */
desc.push_back(i);
que.push(i);
}
while (not(que.empty())) {
long c = que.front(); que.pop();
/* 0 부터 c 의 일의자리 숫자의 값-1 까지 차례로 뒤에 붙임 */
for (int i=0; i<c%10; i++) {
long n = 10*c + i;
desc.push_back(n);
que.push(n);
}
}
// Control : Output
cout << ((N > desc.size()) ? -1 : desc[N-1]) << endl;
}
// Helper Functions
/* None */