#include #include #include #include #include using namespace std; int sizes[256],n,k,len,reachedbiggest=0; char letters[26]; int a[10000]; string sol; string genstr() { string res; for( int i = 0; i < k; i++ ) { res+=letters[a[i]-1]; } return res; } bool comp( string str1, string str2 ) { for( int i = 0; i < str1.length(); i++ ) { if( sizes[(int)str1[i]] != sizes[(int)str2[i]] ) { if( sizes[(int)str1[i]] > sizes[(int)str2[i]] ) return true; return false; } } return false; } bool checkperm( string str ) { if( str.length() < 2 ) return false; for( int i = 1; i < str.length(); i++ ) { string test; test = str.substr( i, str.length()-i ) + str.substr( 0, i ); if( comp( test, str ) == false ) return false; } sol = str; return true; } void CheckString() { if( reachedbiggest == n ) return; if( checkperm(genstr()) ) reachedbiggest++; } void var(int p) { if(p == k+1) { CheckString(); return; } for(int i = 1; i <= len; i++) { a[p-1] = i; var(p+1); } } int main() { freopen( "nthword.in", "r", stdin ); freopen( "nthword.out", "w", stdout ); for( int i = 0; i < 256; i++ ) { sizes[i]=26; } scanf("%s", letters); scanf("%d%d", &k, &n ); len = strlen(letters); for( int i = 0; i < len; i++ ) { sizes[(int)letters[i]]=i; } var(1); printf("%s",sol.c_str()); return 0; }