#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> ii;
const int INF = 1e9;
const ll LINF = 1e18;
ll max_time;
vector<int> digit;
vector<int> getDigit(ll n) {
vector<int> ans;
for (; n > 0; n /= 10) ans.push_back(n % 10);
return ans;
}
// dp = {tổng số lượng số target_digit, số lượng số}
ii memo[19][2][2];
ii dp(int idx, bool leading, bool smaller, int target_digit) {
if (idx == -1) return {0, 1};
ii& ans = memo[idx][leading][smaller];
if (ans.first != -1) return ans;
ans = {0, 0};
int max_digit = (smaller) ? 9 : digit[idx];
for (int i = 0; i <= max_digit; i++) {
bool new_leading = leading & (i == 0);
ii next_ans = dp(idx - 1, new_leading, smaller | (i < digit[idx]), target_digit);
ans.first += next_ans.first + (!new_leading && i == target_digit) * next_ans.second;
ans.second += next_ans.second;
}
return ans;
}
bool check(ll mid) {
digit = getDigit(mid);
for (int target_digit = 0; target_digit <= 9; target_digit++) {
memset(memo, -1, sizeof memo);
ll cnt = dp(digit.size() - 1, 1, 0, target_digit).first;
if (cnt > max_time) return false;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> max_time;
ll l = 0, r = 1e18, ans = -1;
while (l <= r) {
ll mid = (l + r) >> 1;
if (check(mid)) {
ans = mid;
l = mid + 1;
}
else {
r = mid - 1;
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGxsLCBsbD4gaWk7ICAKCmNvbnN0IGludCBJTkYgPSAxZTk7ICAKY29uc3QgbGwgTElORiA9IDFlMTg7ICAKCmxsIG1heF90aW1lOyAKdmVjdG9yPGludD4gZGlnaXQ7ICAgCgp2ZWN0b3I8aW50PiBnZXREaWdpdChsbCBuKSB7Cgl2ZWN0b3I8aW50PiBhbnM7IAoJZm9yICg7IG4gPiAwOyBuIC89IDEwKSBhbnMucHVzaF9iYWNrKG4gJSAxMCk7IAoJcmV0dXJuIGFuczsgCn0KCi8vIGRwID0ge3Thu5VuZyBz4buRIGzGsOG7o25nIHPhu5EgdGFyZ2V0X2RpZ2l0LCBz4buRIGzGsOG7o25nIHPhu5F9CmlpIG1lbW9bMTldWzJdWzJdOyAKCmlpIGRwKGludCBpZHgsIGJvb2wgbGVhZGluZywgYm9vbCBzbWFsbGVyLCBpbnQgdGFyZ2V0X2RpZ2l0KSB7CglpZiAoaWR4ID09IC0xKSByZXR1cm4gezAsIDF9OyAgCgoJaWkmIGFucyA9IG1lbW9baWR4XVtsZWFkaW5nXVtzbWFsbGVyXTsgCglpZiAoYW5zLmZpcnN0ICE9IC0xKSByZXR1cm4gYW5zOyAgCgoJYW5zID0gezAsIDB9OyAKCWludCBtYXhfZGlnaXQgPSAoc21hbGxlcikgPyA5IDogZGlnaXRbaWR4XTsgCgoJZm9yIChpbnQgaSA9IDA7IGkgPD0gbWF4X2RpZ2l0OyBpKyspIHsKCQlib29sIG5ld19sZWFkaW5nID0gbGVhZGluZyAmIChpID09IDApOyAgCgkJaWkgbmV4dF9hbnMgPSBkcChpZHggLSAxLCBuZXdfbGVhZGluZywgc21hbGxlciB8IChpIDwgZGlnaXRbaWR4XSksIHRhcmdldF9kaWdpdCk7IAoJCWFucy5maXJzdCArPSBuZXh0X2Fucy5maXJzdCArICghbmV3X2xlYWRpbmcgJiYgaSA9PSB0YXJnZXRfZGlnaXQpICogbmV4dF9hbnMuc2Vjb25kOyAKCQlhbnMuc2Vjb25kICs9IG5leHRfYW5zLnNlY29uZDsgIAoJfSAKCglyZXR1cm4gYW5zOyAKfQoKYm9vbCBjaGVjayhsbCBtaWQpIHsKCWRpZ2l0ID0gZ2V0RGlnaXQobWlkKTsgIAoKCWZvciAoaW50IHRhcmdldF9kaWdpdCA9IDA7IHRhcmdldF9kaWdpdCA8PSA5OyB0YXJnZXRfZGlnaXQrKykgewoJCW1lbXNldChtZW1vLCAtMSwgc2l6ZW9mIG1lbW8pOwoJCWxsIGNudCA9IGRwKGRpZ2l0LnNpemUoKSAtIDEsIDEsIDAsIHRhcmdldF9kaWdpdCkuZmlyc3Q7IAoJCWlmIChjbnQgPiBtYXhfdGltZSkgcmV0dXJuIGZhbHNlOyAgCgl9CgoJcmV0dXJuIHRydWU7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbWF4X3RpbWU7ICAKCglsbCBsID0gMCwgciA9IDFlMTgsIGFucyA9IC0xOyAKCgl3aGlsZSAobCA8PSByKSB7CgkJbGwgbWlkID0gKGwgKyByKSA+PiAxOyAKCgkJaWYgKGNoZWNrKG1pZCkpIHsKCQkJYW5zID0gbWlkOyAgCgkJCWwgPSBtaWQgKyAxOyAKCQl9CgkJZWxzZSB7CgkJCXIgPSBtaWQgLSAxOyAKCQl9Cgl9CgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0=