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 C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;

int a[26]={0};
char b[26];
char str1[5005];
char str2[5005];
char temp[5005];
int	main()
{
	cin>>str1;
	int q;
	cin>>q;
	int t=0;
	for(int i=0;i<strlen(str1);i++)
	{
		a[str1[i]-'a']=1;
	}
	
	for(int i=0;i<26;i++)
	{
		if(a[i])
			b[t++]=i+'a';			
	}
	
	int k=0,m=0,n=0;
	str2[m]=temp[m]=b[n];
	str2[m+1]=temp[m+1]='\0';
	int flag=0;
	while(1)
	{
		//cout<<str2<<" "<<k<<endl;
		flag=0;
		if(strstr(str1,str2)!=NULL)
		{
			k++;
			if(k>=q)
				break;
			flag=1;
		}
		
		if(flag)
		{
			str2[++m]=b[0];
			str2[m+1]='\0';
			
		}
		else
		{
			int w=0;
			for(w=0;w<t;w++)
				if(str2[m]==b[w])
					break;
						
			while(w+1>=t)
			{
				--m;
				for(w=0;w<t;w++)
					if(str2[m]==b[w])
						break;
			}
			
			str2[m]=b[w+1];
			str2[m+1]='\0';
			
		}
		
			
	}
	
	cout<<str2<<endl;
	
	
	
	return 0;
}