#include<bits/stdc++.h>
using namespace std;
int n=1,m,father[50005];
string name[50005];
int wz(string s){
for(int i=1;i<=n;i++){
if(s.substr(1,s.size()-1)==name[i].substr(1,name[i].size()-1))
return i;
}
}
int find(int x){
if(father[x]!=x)father[x]=find(father[x]);
return father[x];
}
void unionn(int x,int y){
x=find(x);
father[y]=x;
}
int main(){
for(int i=1;i<=50005;i++)father[i]=i;
char bz;
while(1){
int die,w;cin>>name[n];
string s=name[n];
if(s[0]=='#'){
die=n;father[n]=father[wz(s)];
}
if(s[0]=='+'){
unionn(die,wz(s));father[n]=father[wz(s)];
}
if(s[0]=='?'){
bool y=0;
for(int i=1;i<=n;i++)find(i);
while(1){
if(y)cin>>s;y=1;
if(s[0]=='$')return 0;
for(int i=1;i<s.size();i++)cout<<s[i];cout<<' ';
s=name[father[(wz(s))]];
for(int i=1;i<s.size();i++)cout<<s[i];cout<<endl;
}
}
n++;
}
}