Problem:
Score : 300 points

Problem Statement

You are given a string s.
Among the different substrings of s, print the K-th lexicographically smallest one.

A substring of s is a string obtained by taking out a non-empty contiguous part in s.
For example, if s = ababc, a, bab and ababc are substrings of s, while ac, z and an empty string are not.
Also, we say that substrings are different when they are different as strings.

Let X = x_{1}x_{2}...x_{n} and Y = y_{1}y_{2}...y_{m} be two distinct strings. X is lexicographically larger than Y if and only if Y is a prefix of X or x_{j} > y_{j} where j is the smallest integer such that x_{j} \neq y_{j}.

Constraints

1 ≤ |s| ≤ 5000

s consists of lowercase English letters.

1 ≤ K ≤ 5

s has at least K different substrings.

Partial Score

200 points will be awarded as a partial score for passing the test set satisfying |s| ≤ 50.

Input

Input is given from Standard Input in the following format:

s
K

Output

Print the K-th lexicographically smallest substring of K.

Sample Input 1

aba
4

Sample Output 1

b

s has five substrings: a, b, ab, ba and aba.
Among them, we should print the fourth smallest one, b.
Note that we do not count a twice.

Sample Input 2

atcoderandatcodeer
5

Sample Output 2

andat

Sample Input 3

z
1

Sample Output 3

z

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int k = sc.nextInt();

        for (int i1 = 'a'; i1 <= 'z'; i1++) {
            String s1 = String.valueOf((char) i1);
            if (s.contains(s1)) {
                k--;
                if (k == 0) {
                    System.out.println(s1);
                    return;
                }
            } else {
                continue;
            }
            for (int i2 = 'a'; i2 <= 'z'; i2++) {
                String s2 = String.valueOf((char) i2);
                if (s.contains(s1+s2)) {
                    k--;
                    if (k == 0) {
                        System.out.println(s1+s2);
                        return;
                    }
                } else {
                    continue;
                }
                for (int i3 = 'a'; i3 <= 'z'; i3++) {
                    String s3 = String.valueOf((char) i3);
                    if (s.contains(s1+s2+s3)) {
                        k--;
                        if (k == 0) {
                            System.out.println(s1+s2+s3);
                            return;
                        }
                    } else {
                        continue;
                    }
                    for (int i4 = 'a'; i4 <= 'z'; i4++) {
                        String s4 = String.valueOf((char) i4);
                        if (s.contains(s1+s2+s3+s4)) {
                            k--;
                            if (k == 0) {
                                System.out.println(s1+s2+s3+s4);
                                return;
                            }
                        } else {
                            continue;
                        }
                        for (int i5 = 'a'; i5 <= 'z'; i5++) {
                            String s5 = String.valueOf((char) i5);
                            if (s.contains(s1+s2+s3+s4+s5)) {
                                k--;
                                if (k == 0) {
                                    System.out.println(s1+s2+s3+s4+s5);
                                    return;
                                }
                            } else {
                                continue;
                            }

                        }
                    }
                }
            }
        }

        // int[] minc = new int[5];
        // int count = 0;
        // out: for(int i='a'; i<='z'; i++){
        // for(int j=0; j<s.length(); j++){
        // if(s.charAt(j) == i){
        // minc[count] = i;
        // count++;
        // if(count = 5) break out;
        // continue out;
        // }
        // }
        // }

        // if(k == 1){
        // System.out.println((char)minc[0]);
        // }

        // count = 5-k;

        // for(int i=0; i<5; i++){
        // int num = 0;

        // }
    }
}