#include<iostream>
#include<cstring>
#include<map> using namespace std;
int father[50010],i,num=0;
map<string,int> names;
map<int,string> namenum;
int find(int x){ if(father[x]==x) return x;
return father[x]=find(father[x]);
}
void unite(int x,int y){ int rx=find(x);
int ry=find(y);
if(rx!=ry) father[ry]=rx;
}
int main(){
for(i=1;i<=50000;++i)father[i]=i;
string str="0123456",strfather="123456";
string strson="123456",strx="123456";
while(str[0]!='$'){
num++;
cin>>str;
if(str[0]=='#'){
for(i=1;i<=6;++i)strfather[i-1]=str[i];
if(names[strfather]==0){
names[strfather]=num;
namenum[num]=strfather;
}
}
if(str[0]=='+'){
for(i=1;i<=6;++i)strson[i-1]=str[i];
if(names[strson]==0){
names[strson]=num;
namenum[num]=strson;
}
unite(names[strfather],names[strson]);
}
if(str[0]=='?'){
for(i=1;i<=6;++i)strx[i-1]=str[i];
int x=find(names[strx]);
cout<<strx<<" "<<namenum[x]<<endl;
}
}
return 0;
}