#include <bits/stdc++.h>
#define eggy using
#define party namespace
eggy party std;
int n,m,f[50001],q,t1,t2,i,j,k,lsl = 1,lshl = 1,gfl = 1,gx;
string ls,lsh[50001],input[50001];
bool fg,dbug = 0;
int getf(int gf);
void mg(int t1,int t2);
inline string zh(string a);
int gets(string a);
void print(int a[],int l);
int main()
{
while(getline(cin,input[lsl]))
{
if (input[lsl].size() == 1) break;
if (input[lsl][0] == '?' && gx == 0) gx = lsl-1;
lsl++;
}getchar();getchar();
for (i = 1; i <= lsl; i++)
f[i] = i;
for (i = 1; i <= lsl; i++)
{
fg = 0;
int l = 1,r = lshl,mid;
while(l <= r)
{
mid = (l + r) / 2;
if (zh(lsh[mid]) < zh(input[i]))
l = mid + 1;
else if (zh(lsh[mid]) > zh(input[i]))
r = mid - 1;
else
{
fg = 1;
break;
}
}
if (!fg)
lsh[lshl++] = input[i];
}lshl--;
for (i = 1; i < lshl; i++)
lsh[i] = zh(lsh[i]);
sort(lsh + 1, lsh + lshl);
while(1)
{
t1 = gets(input[gfl]);
for (i = gfl+1; input[i][0] != '#' && input[i][0] != '$' && i <= gx; i++)
{
t2 = gets(input[i]);
mg(t1,t2);
if (dbug) printf("%d %d\n",t1,t2);
}
if(dbug) print(f,lshl-1);
if (input[i][0] == '$') break;
gfl = i;
}
for (i = 1; i < lshl; i++)
f[i] = getf(f[i]);
if (dbug)
{
for (i = 1; i < lshl; i++)
cout << lsh[i] << endl;
print(f,lshl-1);
}
for (i = gx+1; i < lsl;i++)
cout << zh(input[i]) << " " << lsh[getf(gets(zh(input[i])))] << endl;
return 0;
}
int getf(int gf)
{
if (f[gf] == gf) return gf;
else
{
f[gf] = getf(f[gf]);
return f[gf];
}
}
void mg(int t1,int t2)
{
int t3 = getf(t1),t4 = getf(t2);
if (t3 != t4)
{
f[t4] = t3;
}
}
inline string zh(string a)
{
if (a.size() == 7)
{
string b = " ";
int i;
for (i = 1; i <= 6; i++)
{
b[i-1] = a[i];
}
return b;
}
return a;
}
int gets(string a)
{
int l = 1,r = lshl,mid;
while(l <= r)
{
mid = (l + r) / 2;
if (zh(lsh[mid]) < zh(a))
l = mid + 1;
else if (zh(lsh[mid]) > zh(a))
r = mid - 1;
else
return mid;
if (dbug) printf("%d %d %d\n",l,r,mid);
}
return -1;
}
void print(int a[],int l)
{
int i;
for (i = 1; i <= l; i++)
{
printf("%d ",a[i]);
}printf("\n");
return;
}