fun main(args: Array<String>) {
    val s = readLine() ?: return
    val k = readLine()?.toInt() ?: return

    // sの長さがk以下の場合は全組み合わせ（最大で15）を試してk番目のものを出力
    if (s.length <= k) {
        println(allSubstring(s).sorted()[k - 1])
        return
    }

    // sに含まれる最小文字があるindex
    val minCharIndexes = mutableListOf<Int>()

    // ここで有効なminCharIndexについて考える
    // minCharIndexがs.length-1と等しく（つまりs.last()で）、かつkが5だった場合
    // このminCharから始まる有効なsubstringを作ることができない
    // 従って、最初から s.substring(0, s.length-k）の範囲での最小文字を探して、
    // それを文字列sにおける最小文字とする
    val minChar = s.substring(0, s.length - k + 1).min() ?: return

    for ((i, c) in s.withIndex()) {
        if (c == minChar && i <= s.length - k) {
            minCharIndexes += i
        }
    }

    val result = mutableSetOf<String>()

    // s.length - k, s.length の範囲に1~5番目に小さいsubstringがある可能性があるため、
    // この範囲でつくれるsubstringをセットする
    result.addAll(allSubstring(s.substring(s.length - k, s.length)))

    for (i in 1..k) {
        for (minIndex in minCharIndexes) {
            val substring = s.substring(minIndex, minIndex + i)
            result += substring
        }
    }

    println(result.sorted()[k - 1])
}

private fun allSubstring(s: String): Set<String> {
    val allSubstring = mutableSetOf<String>()
    for (i in s.indices) {
        for (j in i..s.length) {
            if (i == j) continue
            allSubstring += s.substring(i, j)
        }
    }
    return allSubstring
}