private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readLong() = readLn().toLong() // single long
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map(String::toInt) // list of ints
private fun readLongs() = readStrings().map(String::toLong) // list of longs

fun main(args: Array<String>) {
    val k = readInt()

    // 1 桁はすべて該当。
    // 2 桁は、3件ずつ。ただし90番台だけ2件。
    // 3桁目が2-7のとき、9通り。1,8のとき8通り。9のとき5通り。

    val a = mutableListOf<Long>()

    a.add(1)
    a.add(2)
    a.add(3)
    a.add(4)
    a.add(5)
    a.add(6)
    a.add(7)
    a.add(8)
    a.add(9)
    a.add(10)
    a.add(11)
    a.add(12)
    a.add(21)
    a.add(22)
    a.add(23)
    a.add(32)
    a.add(33)
    a.add(34)
    a.add(43)
    a.add(44)
    a.add(45)
    a.add(54)
    a.add(55)
    a.add(56)
    a.add(65)
    a.add(66)
    a.add(67)
    a.add(76)
    a.add(77)
    a.add(78)
    a.add(87)
    a.add(88)
    a.add(89)
    a.add(98)
    a.add(99)

    val b = mutableMapOf<Int, List<Long>>()
    b.put(0, listOf(0,1,10,11,12))
    b.put(1, listOf(100,101,110,111,112,121,122,123))
    b.put(2, listOf(210,211,212,221,222,223,232,233,234))
    b.put(3, listOf(321,322,323,332,333,334,343,344,345))
    b.put(4, listOf(432,433,434,443,444,445,454,455,456))
    b.put(5, listOf(543,544,545,554,555,556,565,566,567))
    b.put(6, listOf(654,655,656,665,666,667,676,677,678))
    b.put(7, listOf(765,766,767,776,777,778,787,788,789))
    b.put(8, listOf(876,877,878,887,888,889,898,899))
    b.put(9, listOf(987,988,989,998,999))

    a.addAll(b[1]!!)
    a.addAll(b[2]!!)
    a.addAll(b[3]!!)
    a.addAll(b[4]!!)
    a.addAll(b[5]!!)
    a.addAll(b[6]!!)
    a.addAll(b[7]!!)
    a.addAll(b[8]!!)
    a.addAll(b[9]!!)

    fun f(d: Int, c: List<Long>?) {
        if (c != null) {
            c.forEach {
                a.add(d * 1000L + it)
            }
        }
    }

    (1..5000000).filter(::lunlun).forEach {
        val c = it % 10
        f(it, b[c - 1])
        f(it, b[c])
        f(it, b[c + 1])
    }

    println(a[k - 1])
}

fun lunlun(r: Int): Boolean {
    if (r < 10) {
        return true
    }
    var od = r % 10
    var x = r / 10
    while (x != 0) {
        val d = x % 10
        if (Math.abs(od - d) > 1) {
            return false
        }
        od = d
        x /= 10
    }
    return true
}