from collections.abc import Iterable from itertools import product def accum_dp(xs: Iterable, f, op, e, init: dict, *, is_reset=True): dp = init.copy() for x in xs: pp = {} if is_reset else dp.copy() dp, pp = pp, dp for fm_key, fm_val in pp.items(): for to_key, to_val in f(fm_key, fm_val, x): dp[to_key] = op(dp.get(to_key, e), to_val) return dp def is_kadomatu(a, b, c) -> bool: if a == c: return False return (a < b > c) or (a > b < c) def f(k, v, i): global digits p0, p1, lt = k if lt: for d in range(10): if is_kadomatu(p0, p1, d): yield (p1, d, lt), v else: for d in range(10): if d > digits[i]: continue if is_kadomatu(p0, p1, d): nlt = d < digits[i] yield (p1, d, nlt), v def op(a, b): return a + b memo = {} def digit_dp(nd: int) -> int: global digits if nd < 3: return 0 elif nd < len(digits): if nd in memo: return memo[nd] init = {} for a, b in product(range(1, 10), range(10)): if a == b: continue init[(a, b, True)] = 1 dp = accum_dp(range(2, nd), f, op, 0, init) res = sum(dp.values()) memo[nd] = res return res else: init = {} for a, b in product(range(1, 10), range(10)): if a == b: continue if [a, b] > [digits[0], digits[1]]: continue lt = [a, b] < [digits[0], digits[1]] init[(a, b, lt)] = 1 dp = accum_dp(range(2, len(digits)), f, op, 0, init) return sum(dp.values()) INF = 1 << 62 T = int(input()) for _ in range(T): K = int(input()) lo = 0 hi = INF ans = INF while lo <= hi: m = (lo + hi) // 2 digits = [int(c) for c in str(m)] res = 0 for i in range(len(digits)+1): res += digit_dp(i) if res >= K: ans = min(ans, m) hi = m - 1 else: lo = m + 1 print(ans)