#include <bits/stdc++.h>
using namespace std;
#define MAX 100000
#define LL long long
int Rank[20][MAX];
int arr[100000],cum[100000],lcp[100000];
struct Tuple
{
int left,right,pos;
};
bool compare(const Tuple &a, const Tuple &b)
{
return a.left == b.left ? a.right < b.right : a.left < b.left;
}
void counting_sort(Tuple t[] , int n)
{
int count[MAX+9];
Tuple temp[n + 9];
memset(count , 0 , sizeof count);
for(int i = 0 ;i < n ; i++)
count[t[i].right + 1]++;
for(int i = 1 ; i < MAX ; i++)
count[i] += count[i-1];
for(int i = 0 ; i<n ; i++)
{
temp[count[t[i].right +1] - 1] = t[i];
count[t[i].right + 1]--;
}
memset(count , 0 , sizeof count);
for(int i = 0 ; i < n ; i ++)
count[t[i].left + 1] ++;
for(int i = 1 ; i<MAX ; i++)
count[i] += count[i-1];
for(int i = n- 1; i>=0 ; i--)
{
t[count[temp[i].left + 1] - 1] = temp[i];
count[temp[i].left + 1]--;
}
}
void suffix_array(char s[],int n)
{
for(int i=0;i<n;i++)
Rank[0][i] = s[i] - 97;
Tuple t[n+9];
for(int stp = 1 , cnt = 1 ; (cnt>>1) < n ; cnt<<=1 , stp++)
{
for(int i=0;i<n;i++)
{
t[i].left = Rank[stp-1][i];
t[i].right = i+cnt < n ? Rank[stp-1][i + cnt] : -1;
t[i].pos = i;
}
//sort(t,t+n,compare);
counting_sort(t , n);
for(int i=0;i<n;i++)
Rank[stp][t[i].pos] = i > 0 && t[i-1].left == t[i].left && t[i-1].right == t[i].right ? Rank[stp][t[i-1].pos] : i;
}
int pos = ceil(log(n)/log(2));
for(int i = 0;i<n;i++)
arr[Rank[pos][i]] = i;
}
int LCP(int i,int j,int n)
{
int count = 0;
if(i == j)
return n - i;
for(int stp = ceil(log(n)/log(2)) ; stp >= 0 && i < n && j < n ; stp --)
if(Rank[stp][i] == Rank[stp][j])
{
count += 1<<stp;
i += 1<<stp;
j += 1<<stp;
}
return count;
}
void lcpArray(int sa[],int n)
{
lcp[0] = 0;
for(int i = 1;i<n;i++)
lcp[i] = LCP(sa[i - 1] , sa[i],n);
}
int main()
{
char s[100000];
scanf("%s",s);
int n = strlen(s);
suffix_array(s,n);
lcpArray(arr , n);
cum[0] = n - arr[0];
for(int i = 1;i < n;i++){
cum[i] = cum[i-1] + (n - arr[i] - lcp[i]);
}
int q;
scanf("%d",&q);
while(q--)
{
int a ;
scanf("%d",&a);
int pos ;
pos = lower_bound(cum , cum + n , a) - cum;
int i , j;
for(int j = 0 , i = arr[pos] ; j< a - cum[pos-1] + lcp[pos] ; j++,i++)
printf("%c",s[i]);
printf("\n");
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTUFYIDEwMDAwMAojZGVmaW5lIExMIGxvbmcgbG9uZyAKaW50IFJhbmtbMjBdW01BWF07CmludCBhcnJbMTAwMDAwXSxjdW1bMTAwMDAwXSxsY3BbMTAwMDAwXTsKc3RydWN0IFR1cGxlCnsKCWludCBsZWZ0LHJpZ2h0LHBvczsKfTsKYm9vbCBjb21wYXJlKGNvbnN0IFR1cGxlICZhLCBjb25zdCBUdXBsZSAmYikKewoJcmV0dXJuIGEubGVmdCA9PSBiLmxlZnQgPyBhLnJpZ2h0IDwgYi5yaWdodCA6IGEubGVmdCA8IGIubGVmdDsKfQp2b2lkIGNvdW50aW5nX3NvcnQoVHVwbGUgdFtdICwgaW50IG4pCnsKCWludCBjb3VudFtNQVgrOV07CglUdXBsZSB0ZW1wW24gKyA5XTsKCW1lbXNldChjb3VudCAsIDAgLCBzaXplb2YgY291bnQpOwoKCWZvcihpbnQgaSA9IDAgO2kgPCBuIDsgaSsrKQoJCWNvdW50W3RbaV0ucmlnaHQgKyAxXSsrOwoKCWZvcihpbnQgaSA9IDEgOyBpICA8IE1BWCA7IGkrKykKCQljb3VudFtpXSArPSBjb3VudFtpLTFdOwoKCWZvcihpbnQgaSA9IDAgOyBpPG4gOyBpKyspCgl7CgkJdGVtcFtjb3VudFt0W2ldLnJpZ2h0ICsxXSAtIDFdID0gdFtpXTsKCQljb3VudFt0W2ldLnJpZ2h0ICsgMV0tLTsKCX0JCgoJbWVtc2V0KGNvdW50ICwgMCAsIHNpemVvZiBjb3VudCk7CgoJZm9yKGludCBpID0gMCA7IGkgPCBuIDsgaSArKykKCQljb3VudFt0W2ldLmxlZnQgKyAxXSArKzsKCglmb3IoaW50IGkgPSAxIDsgaTxNQVggOyBpKyspCgkJY291bnRbaV0gKz0gY291bnRbaS0xXTsKCglmb3IoaW50IGkgPSBuLSAxOyBpPj0wIDsgaS0tKQoJewoJCXRbY291bnRbdGVtcFtpXS5sZWZ0ICsgMV0gLSAxXSA9IHRlbXBbaV07CgkJY291bnRbdGVtcFtpXS5sZWZ0ICsgMV0tLTsKCX0KfQp2b2lkIHN1ZmZpeF9hcnJheShjaGFyIHNbXSxpbnQgbikKewoKCWZvcihpbnQgaT0wO2k8bjtpKyspCgkJUmFua1swXVtpXSA9IHNbaV0gLSA5NzsKCglUdXBsZSB0W24rOV07CgoKCWZvcihpbnQgc3RwID0gMSAsIGNudCA9IDEgOyAoY250Pj4xKSA8IG4gOyBjbnQ8PD0xICwgc3RwKyspCgl7CgkJZm9yKGludCBpPTA7aTxuO2krKykKCQl7CgkJCXRbaV0ubGVmdCA9IFJhbmtbc3RwLTFdW2ldOwoJCQl0W2ldLnJpZ2h0ID0gaStjbnQgPCBuID8gUmFua1tzdHAtMV1baSArIGNudF0gOiAtMTsKCQkJdFtpXS5wb3MgPSBpOwoJCX0KCQkvL3NvcnQodCx0K24sY29tcGFyZSk7CgkJY291bnRpbmdfc29ydCh0ICwgbik7CgkJZm9yKGludCBpPTA7aTxuO2krKykKCQkJUmFua1tzdHBdW3RbaV0ucG9zXSA9IGkgPiAwICYmIHRbaS0xXS5sZWZ0ID09IHRbaV0ubGVmdCAmJiB0W2ktMV0ucmlnaHQgPT0gdFtpXS5yaWdodCA/IFJhbmtbc3RwXVt0W2ktMV0ucG9zXSA6IGk7Cgl9CglpbnQgcG9zID0gY2VpbChsb2cobikvbG9nKDIpKTsKCWZvcihpbnQgaSA9IDA7aTxuO2krKykKCQlhcnJbUmFua1twb3NdW2ldXSA9IGk7Cn0KaW50IExDUChpbnQgaSxpbnQgaixpbnQgbikKewoJaW50IGNvdW50ID0gMDsKCWlmKGkgPT0gaikKCQlyZXR1cm4gbiAtIGk7Cglmb3IoaW50IHN0cCA9IGNlaWwobG9nKG4pL2xvZygyKSkgOyBzdHAgPj0gMCAmJiBpIDwgbiAmJiBqIDwgbiA7IHN0cCAtLSkKCQlpZihSYW5rW3N0cF1baV0gPT0gUmFua1tzdHBdW2pdKQoJCXsKCQkJY291bnQgKz0gMTw8c3RwOwoJCQlpICs9IDE8PHN0cDsKCQkJaiArPSAxPDxzdHA7CgkJfQoJcmV0dXJuIGNvdW50Owp9CnZvaWQgbGNwQXJyYXkoaW50IHNhW10saW50IG4pCnsKCWxjcFswXSA9IDA7Cglmb3IoaW50IGkgPSAxO2k8bjtpKyspCgkJbGNwW2ldID0gTENQKHNhW2kgLSAxXSAsIHNhW2ldLG4pOwoJCn0KaW50IG1haW4oKQp7CgljaGFyIHNbMTAwMDAwXTsKCXNjYW5mKCIlcyIscyk7CglpbnQgIG4gPSBzdHJsZW4ocyk7CglzdWZmaXhfYXJyYXkocyxuKTsKCWxjcEFycmF5KGFyciAsIG4pOwoJY3VtWzBdID0gbiAtIGFyclswXTsKCWZvcihpbnQgaSA9IDE7aSA8IG47aSsrKXsKCQljdW1baV0gPSBjdW1baS0xXSArIChuIC0gYXJyW2ldIC0gbGNwW2ldKTsKCX0KCWludCBxOwoJc2NhbmYoIiVkIiwmcSk7Cgl3aGlsZShxLS0pCgl7CgkJaW50IGEgOwoJCXNjYW5mKCIlZCIsJmEpOwoJCWludCBwb3MgOwoJCXBvcyA9IGxvd2VyX2JvdW5kKGN1bSAsIGN1bSArIG4gLCBhKSAtIGN1bTsKCQlpbnQgaSAsIGo7CgkJZm9yKGludCBqID0gMCAsIGkgPSBhcnJbcG9zXSA7IGo8IGEgLSBjdW1bcG9zLTFdICsgbGNwW3Bvc10gOyBqKyssaSsrKQoJCQlwcmludGYoIiVjIixzW2ldKTsKCQlwcmludGYoIlxuIik7Cgl9CglyZXR1cm4gMDsKfQ==