#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];
int getf(int gf);
void mg(int t1,int t2);
inline string zh(string a);
int gets(string a);
int main()
{
while(getline(cin,input[lsl]))
{
if (input[lsl].size() == 1) break;
if (input[lsl][0] == '?' && gx == 0) gx = lsl-1;
lsl++;
}
for (i = 1; i <= lsl; i++)
{
f[i] = i;
k = gets(input[i]);
if (k == -1)
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 (input[i][0] == '$') break;
gfl = i;
}
for (i = 1; i < lshl; i++)
f[i] = getf(f[i]);
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 return f[gf] = getf(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;
}
return -1;
}