import std.stdio;
import std.algorithm;

struct Lunlun {
	char[] s;

	void init() {
		s = new char[1];
		s[0] = '1';
	}
	
	void popFront() {
		bool countUp(char[] t) {
			if (t.length > 1) {
				if (t[0] < '9' && t[0] <= t[1]) {
					++t[0];
					return true;
				} else {
					if (!countUp(t[1..$])) {
						return false;
					}
					if (t[1] == '0') {
						t[0] = '0';
					} else {
						t[0] = cast(char)(t[1] - 1);
					}
							
					return true;
				}
				assert(false);
			} else {
				if (t[0] < '9') {
					t[0] = cast(char)(t[0] + 1);
					return true;
				}
				return false;
			}
			assert(false);
		}

		if (!countUp(s)) {
			s[] = '0';
			s ~= '1';
		}
	}

	const(char)[] front() {
		auto t = s.dup;

		reverse(t);
		return t;
	}

	bool empty() {
		return false;
	}
}

void main() {
	int k;

	readf(" %s", &k);

	Lunlun l;
	l.init();
	
	foreach (i;1..k) {
		l.popFront();
	}

	writeln(l.front);
}
