from collections import deque



def main():

  k = int(eval(input()))



  # 前後をチェックする再帰関数( 要素として深さも必要そう / DPのメモ化とか使えそう )

  # 

  # 生データ

  # 1桁

  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

  # 2桁 

  # [10, 11, 12, 21, 22, 23,..., 98, 99]

  #

  # 1

  # 10 11 12

  #

  #          2

  # .. .. .. 21 22 23

  #

  # Point.

  #   1の木, 2の木と小さい順に自然となってる

  #   重複していない

  #

  # キューを使った方法の解説

  #

  # 初期状態

  # 1 2 3 4 5 6 7 8 9

  #

  # 遷移1

  # . 2 3 4 5 6 7 8 9 10 11 12

  #

  # 遷移2

  # . . 3 4 5 6 7 8 9 10 11 12 21 22 23

  #

  # 遷移3

  # . . . 4 5 6 7 8 9 10 11 12 21 22 23 32 33 34



  # 最初の1桁データの用意

  q = deque([1, 2, 3, 4, 5, 6, 7, 8, 9])



  for _ in range(k-1):

    p = q.popleft()

    l = p % 10

    # print("l:", l)



    if l - 1 >= 0:

      new_data1 = int(str(p) + str(l - 1))

      # print("new_data1:", new_data1)

      q.append(new_data1)

      # print("q:", q)

    

    new_data2 = int(str(p) + str(l))

    # print("new_data2:", new_data2)

    q.append(new_data2)

    # print("q:", q)



    if l + 1 <= 9:

      new_data3 = int(str(p) + str(l + 1))

      # print("new_data3:", new_data3)

      q.append(new_data3)

      # print("q:", q)



  # print("===============")

  print((q[0]))

  # print("===============")



if __name__ == "__main__":

  main()

from collections import deque



def main():

  k = int(eval(input()))



  # 前後をチェックする再帰関数( 要素として深さも必要そう / DPのメモ化とか使えそう )

  # 

  # 生データ

  # 1桁

  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

  # 2桁 

  # [10, 11, 12, 21, 22, 23,..., 98, 99]

  #

  # 1

  # 10 11 12

  #

  #          2

  # .. .. .. 21 22 23

  #

  # Point.

  #   1の木, 2の木と小さい順に自然となってる

  #   重複していない

  #

  # キューを使った方法の解説

  #

  # 初期状態

  # 1 2 3 4 5 6 7 8 9

  #

  # 遷移1

  # . 2 3 4 5 6 7 8 9 10 11 12

  #

  # 遷移2

  # . . 3 4 5 6 7 8 9 10 11 12 21 22 23

  #

  # 遷移3

  # . . . 4 5 6 7 8 9 10 11 12 21 22 23 32 33 34



  # 最初の1桁データの用意

  q = deque([1, 2, 3, 4, 5, 6, 7, 8, 9])



  for _ in range(k-1):

    p = q.popleft()

    l = p % 10

    # print("l:", l)



    if l - 1 >= 0:

      new_data1 = p*10 + (l - 1)

      # print("new_data1:", new_data1)

      q.append(new_data1)

      # print("q:", q)

    

    new_data2 = p*10 + l

    # print("new_data2:", new_data2)

    q.append(new_data2)

    # print("q:", q)



    if l + 1 <= 9:

      new_data3 = p*10 + (l + 1)

      # print("new_data3:", new_data3)

      q.append(new_data3)

      # print("q:", q)



  print((q[0]))



if __name__ == "__main__":

  main()

from collections import deque


def main():
    k = int(eval(input()))
    # 前後をチェックする再帰関数( 要素として深さも必要そう / DPのメモ化とか使えそう )
    #
    # 生データ
    # 1桁
    # [1, 2, 3, 4, 5, 6, 7, 8, 9]
    # 2桁
    # [10, 11, 12, 21, 22, 23,..., 98, 99]
    #
    # 1
    # 10 11 12
    #
    #          2
    # .. .. .. 21 22 23
    #
    # Point.
    #   1の木, 2の木と小さい順に自然となってる
    #   重複していない
    #
    # キューを使った方法の解説
    #
    # 初期状態
    # 1 2 3 4 5 6 7 8 9
    #
    # 遷移1
    # . 2 3 4 5 6 7 8 9 10 11 12
    #
    # 遷移2
    # . . 3 4 5 6 7 8 9 10 11 12 21 22 23
    #
    # 遷移3
    # . . . 4 5 6 7 8 9 10 11 12 21 22 23 32 33 34
    # 最初の1桁データの用意
    q = deque([1, 2, 3, 4, 5, 6, 7, 8, 9])
    for _ in range(k - 1):
        p = q.popleft()
        l = p % 10
        # print("l:", l)
        if l - 1 >= 0:
            new_data1 = int(str(p) + str(l - 1))
            # print("new_data1:", new_data1)
            q.append(new_data1)
            # print("q:", q)
        new_data2 = int(str(p) + str(l))
        # print("new_data2:", new_data2)
        q.append(new_data2)
        # print("q:", q)
        if l + 1 <= 9:
            new_data3 = int(str(p) + str(l + 1))
            # print("new_data3:", new_data3)
            q.append(new_data3)
            # print("q:", q)
    # print("===============")
    print((q[0]))
    # print("===============")


if __name__ == "__main__":
    main()

from collections import deque


def main():
    k = int(eval(input()))
    # 前後をチェックする再帰関数( 要素として深さも必要そう / DPのメモ化とか使えそう )
    #
    # 生データ
    # 1桁
    # [1, 2, 3, 4, 5, 6, 7, 8, 9]
    # 2桁
    # [10, 11, 12, 21, 22, 23,..., 98, 99]
    #
    # 1
    # 10 11 12
    #
    #          2
    # .. .. .. 21 22 23
    #
    # Point.
    #   1の木, 2の木と小さい順に自然となってる
    #   重複していない
    #
    # キューを使った方法の解説
    #
    # 初期状態
    # 1 2 3 4 5 6 7 8 9
    #
    # 遷移1
    # . 2 3 4 5 6 7 8 9 10 11 12
    #
    # 遷移2
    # . . 3 4 5 6 7 8 9 10 11 12 21 22 23
    #
    # 遷移3
    # . . . 4 5 6 7 8 9 10 11 12 21 22 23 32 33 34
    # 最初の1桁データの用意
    q = deque([1, 2, 3, 4, 5, 6, 7, 8, 9])
    for _ in range(k - 1):
        p = q.popleft()
        l = p % 10
        # print("l:", l)
        if l - 1 >= 0:
            new_data1 = p * 10 + (l - 1)
            # print("new_data1:", new_data1)
            q.append(new_data1)
            # print("q:", q)
        new_data2 = p * 10 + l
        # print("new_data2:", new_data2)
        q.append(new_data2)
        # print("q:", q)
        if l + 1 <= 9:
            new_data3 = p * 10 + (l + 1)
            # print("new_data3:", new_data3)
            q.append(new_data3)
            # print("q:", q)
    print((q[0]))


if __name__ == "__main__":
    main()

-            new_data1 = int(str(p) + str(l - 1)) +            new_data1 = p * 10 + (l - 1) -        new_data2 = int(str(p) + str(l)) +        new_data2 = p * 10 + l -            new_data3 = int(str(p) + str(l + 1)) +            new_data3 = p * 10 + (l + 1) -    # print("===============") -    # print("===============")