from functools import lru_cache maru = [1, 0, 0, 0, 1, 0, 1, 0, 2, 1] accmaru = maru[:] for i in range(1, 10): accmaru[i] += accmaru[i-1] def parse(x): res = 0 while x: x, m = divmod(x, 10) res += maru[m] return res @lru_cache(maxsize=None) def dfs(x): if x < 10: return accmaru[x] d, m = divmod(x, 10) res = 0 for i in range(10 * d, x + 1): res += parse(i) res += d * accmaru[9] res += 10 * (dfs(d - 1) - 1) return res def main(): K = int(input()) l = 0 r = 10 ** 18 while r - l > 1: m = (r + l) // 2 if dfs(m) - 1 > K: r = m else: l = m if dfs(l) - 1 != K: return -1 return l print(main())