#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,l[N],r[N],sum,book1[N],book2[N];
char c[N][N],to[N][N],sto[N];
void dfs(int cur,int L,char sv[]){
// for(int i=1;i<=L;i++){
// printf("%c",sv[i]);
// }printf(" %d \n",cur);
int jud=-1;
for(int i=1;i<=sum;i++){
if(l[i]!=L||book2[i]||book1[i])continue;
// printf("%d\n",i);
int flag=1;
for(int j=1;j<=l[i];j++){
if(sv[j]!=c[i][j]){
flag=0;
break;
}
}if(flag==1){
jud=i;
// printf("%d\n",jud);
int lenn=0;
char STO[N];
for(int i=1;i<=r[jud];i++){
if(!(to[jud][i]=='_'||to[jud][i]<='z'&&to[jud][i]>='A'||to[jud][i]<='9'&&to[jud][i]>='0')){
book1[jud]=1;
dfs(cur+1,lenn,STO);
book1[jud]=0;
lenn=0;
printf("%c",to[jud][i]);
continue;
}STO[++lenn]=to[jud][i];
}if(lenn!=0){
book1[jud]=1;
dfs(cur+1,lenn,STO);
book1[jud]=0;
}
}
}if(jud==-1){
// printf("%d\n",L);
for(int i=1;i<=L;i++){
printf("%c",sv[i]);
}
}
}
int main(){
scanf("%d\n",&n);
for(int i=1;i<=n;i++){
// printf("%d\n",i);
string tmp;
getline(cin,tmp);
int len=tmp.length();
if(tmp[0]=='#'){
printf("\n");
if(tmp[1]=='d'){
sum++;
int i=8;
while(i){
if(!(tmp[i]>='A'&&tmp[i]<='z'))break;
c[sum][++l[sum]]=tmp[i];
i++;
}i++;
while(i){
if(i==len)break;
to[sum][++r[sum]]=tmp[i];
i++;
}
}else{
int lon=len-7;
for(int i=1;i<=sum;i++){
if(l[i]==lon){
int flag=1;
for(int j=1;j<=l[i];j++){
if(c[i][j]!=tmp[j+6]){
flag=0;
break;
}
}if(flag==1){
book2[i]=1;
break;
}
}
}
}
}else{
int le=0;
for(int i=0;i<len;i++){
if(!(tmp[i]=='_'||tmp[i]<='z'&&tmp[i]>='A'||tmp[i]<='9'&&tmp[i]>='0')){
dfs(1,le,sto);
le=0;
printf("%c",tmp[i]);
continue;
}
sto[++le]=tmp[i];
}if(le!=0){
dfs(1,le,sto);
}
printf("\n");
}
}
return 0;
}
测试点2,8,9,10WA,求hack