# kが極端に少ないので、下位K個を管理してよさそうな気がする

# -> なんかダメ

# じゃ決め打ちして全探索することにしてみる どうせ長さは最大でKなので

# 時間的に間に合うか微妙な気がする

# -> はい



s = list(eval(input()))

k = int(eval(input()))

d = {}

for i in range(len(s)):

    for j in range(i, min(i + k, len(s))):

        t = "".join(s[i:j + 1])

        if t not in d:

            d[t] = True

dk = sorted(d.keys())

print((dk[k - 1]))

s = eval(input())

k = int(eval(input()))

lis = []



for i in range(len(s)):

    for j in range(k):

        lis.append("".join(s[i:i + j + 1]))

lis = sorted(list(set(lis)))



print((lis[k - 1]))

# kが極端に少ないので、下位K個を管理してよさそうな気がする
# -> なんかダメ
# じゃ決め打ちして全探索することにしてみる どうせ長さは最大でKなので
# 時間的に間に合うか微妙な気がする
# -> はい
s = list(eval(input()))
k = int(eval(input()))
d = {}
for i in range(len(s)):
    for j in range(i, min(i + k, len(s))):
        t = "".join(s[i : j + 1])
        if t not in d:
            d[t] = True
dk = sorted(d.keys())
print((dk[k - 1]))

s = eval(input())
k = int(eval(input()))
lis = []
for i in range(len(s)):
    for j in range(k):
        lis.append("".join(s[i : i + j + 1]))
lis = sorted(list(set(lis)))
print((lis[k - 1]))

-# kが極端に少ないので、下位K個を管理してよさそうな気がする -# -> なんかダメ -# じゃ決め打ちして全探索することにしてみる どうせ長さは最大でKなので -# 時間的に間に合うか微妙な気がする -# -> はい -s = list(eval(input())) +s = eval(input()) -d = {} +lis = [] -    for j in range(i, min(i + k, len(s))): -        t = "".join(s[i : j + 1]) -        if t not in d: -            d[t] = True -dk = sorted(d.keys()) -print((dk[k - 1])) +    for j in range(k): +        lis.append("".join(s[i : i + j + 1])) +lis = sorted(list(set(lis))) +print((lis[k - 1]))