#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
string s = " "; int c;
}a[50500];
int t , u;
int found (node s)
{
if(a[s.c].c == s.c) return s.c;
return a[s.c].c = found(a[s.c]);
}
int find (string s)
{
if(s == " ") return 0;
for(int i = 1 ; i <= t ; i ++)
{
if(a[i].s == s)
{
return i;
}
}
return 0;
}
int main()
{
string s;
while(cin >> s)
{
if(s[0] == '#')
{
u = find(s.substr(1));
if(u != 0)
{
a[u].c = found(a[u]);
}
else{
++t;
a[t].s = s.substr(1);
a[t].c = t;
}
}
else if(s[0] == '+')
{
if(find(s.substr(1)) != 0)
{
a[find(s.substr(1))].c = found(a[t]);
}
else{
++t;
a[t].c = found(a[t-1]);
a[t].s = s.substr(1);
}
}
else if(s[0] == '?')
{
cout << s.substr(1) << " " << a[found(a[find(s.substr(1))])].s << "\n";
}
}
return 0;
}
谢谢大佬