#include <iostream>
using namespace std;
int cnt;
char mode;
string fname,sname,name;
struct people{
int fa,ind;
string name;
};
people sett[50010];
int search(string n){
for (int i = 1;i <= 50009;i++) if (sett[i].name == n) return i;
return 0;
}
int find(int s){
if (sett[s].fa == s) return s;
else{
return sett[s].fa=find(sett[s].fa);
}
}
void marge(int a,int b){
int a_=find(a);
int b_=find(b);
sett[a_].fa=b_;
}
int main(){
for (int i = 1;i <= 50009;i++) sett[i].ind=i;
for (int i = 1;i <= 50009;i++) sett[i].fa=i;
while (1){
cnt++;
cin >> mode;
if (mode == '$') break;
if (mode == '?'){
cin >> name;
cout << name << " " << sett[sett[search(name)].fa].name << endl;
}
else if (mode == '#'){
cin >> fname;
sett[cnt].name=fname;
}else if (mode == '+'){
cin >> sname;
sett[cnt].name=sname;
marge(sett[cnt].ind,search(fname));
}
}
return 0;
}