/*
分析:
快排+二分。
一开始看到题后用的字典树,就是一道字典树的果题么,
但是总MLE,改来改去还是超了那么一点儿点儿。。。于是就
换了个思路,快排+二分。
果题,没什么需要多说的了。。
2012-11-20
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define N 100011
struct A
{
char str[25];
int index;
}e1[N];
struct B
{
char str[85];
int index;
}e2[N];
int tot;
int cmp1(const void *a,const void *b)
{
A *c,*d;
c=(A *)a;
d=(A *)b;
return strcmp(c->str,d->str);
}
int cmp2(const void *a,const void *b)
{
B *c,*d;
c=(B *)a;
d=(B *)b;
return strcmp(c->str,d->str);
}
int main()
{
int n;
int i,l,j;
char str[111],str1[111],str2[111];
tot=0;
while(gets(str),strcmp(str,"@END@"))
{
for(j=0,l=1;str[l]!=']';l++,j++) str1[j]=str[l];
str1[j]=0;
for(j=0,l+=2;str[l];l++,j++) str2[j]=str[l];
str2[j]=0;
strcpy(e1[tot].str,str1);
strcpy(e2[tot].str,str2);
e1[tot].index=tot;
e2[tot].index=tot;
tot++;
}
qsort(e1,tot,sizeof(e1[0]),cmp1);
for(i=0;i<tot;i++) e2[e1[i].index].index=i;
qsort(e2,tot,sizeof(e2[0]),cmp2);
for(i=0;i<tot;i++) e1[e2[i].index].index=i;
int flag,temp;
int low,mid,up;
scanf("%d",&n);
getchar();
while(n--)
{
flag=0;
gets(str);
if(str[0]=='[')
{
flag=1;
for(j=0,l=1;str[l]!=']';l++,j++) str[j]=str[l];
str[j]=0;
}
low=0;up=tot-1;mid=(low+up)>>1;
if(flag)
{
while(low<=up)
{
temp=strcmp(str,e1[mid].str);
if(temp>0) low=mid+1;
else up=mid-1;
mid=(low+up)>>1;
}
if(strcmp(e1[low].str,str)==0) printf("%s\n",e2[e1[low].index].str);
else printf("what?\n");
}
else
{
while(low<=up)
{
temp=strcmp(str,e2[mid].str);
if(temp>0) low=mid+1;
else up=mid-1;
mid=(low+up)>>1;
}
if(strcmp(e2[low].str,str)==0) printf("%s\n",e1[e2[low].index].str);
else printf("what?\n");
}
}
return 0;
}