#include<bits/stdc++.h>
using namespace std;
const int N=1005;
struct Son{
string type,name;
long long start,end;
};
struct Struct{
int k=0;
long long req,memory;
string name;
Son son[N];
};
struct def{
string type,name;
long long start;
}t[N];
int n,tot=0;
map<string,Struct>s;
vector<string>ss;
long long solve(long long x,long long d){
return(x+d-1)/d*d;
}
int main(){
s["byte"].req=s["byte"].memory=1;
s["short"].req=s["short"].memory=2;
s["int"].req=s["int"].memory=4;
s["long"].req=s["long"].memory=8;
cin>>n;
while(n--){
int op;
cin>>op;
if(op==1){
Struct st,son;
cin>>st.name>>st.k;
st.req=st.memory=0;
for(int i=1;i<=st.k;++i){
cin>>st.son[i].type>>st.son[i].name;
Struct son=s[st.son[i].type];
if(i==1)st.son[i].start=0;
else st.son[i].start=solve(st.son[i-1].start+s[st.son[i-1].type].memory,son.req);
st.son[i].end=st.son[i].start+son.memory-1,st.req=max(st.req,son.req);
}
st.memory=solve(st.son[st.k].start+s[st.son[st.k].type].memory,st.req);
s[st.name]=st;
printf("%lld %lld\n",st.memory,st.req);
}else if(op==2){
tot++;
cin>>t[tot].type>>t[tot].name;
if(tot==1)t[tot].start=0;
else t[tot].start=solve(t[tot-1].start+s[t[tot-1].type].memory,s[t[tot].type].req);
printf("%lld\n",t[tot].start);
}else if(op==3){
ss.clear();
string str,str2="";
Struct st;
long long ans;
cin>>str;
for(int i=0;i<str.size();++i)
if(str[i]=='.')ss.push_back(str2),str2="";
else str2.push_back(str[i]);
ss.push_back(str2);
for(int i=1;i<=tot;++i)
if(t[i].name==ss[0]){
st=s[t[i].type],ans=t[i].start;
break;
}
for(int i=1;i<ss.size();++i)
for(int j=1;j<=st.k;++j)
if(st.son[j].name==ss[i]){
ans+=st.son[j].start,st=s[st.son[j].type];
break;
}
printf("%lld\n",ans);
}else{
long long addr;
Struct st;
string ans;
cin>>addr;
for(int i=1;i<=tot;++i)
if(t[i].start<=addr&&(i==tot||t[i+1].start>addr)){
ans+=t[i].name,st=s[t[i].type],addr-=t[i].start;
break;
}
if(ans==""){
puts("ERR");
continue;
}
bool flag;
while(st.k){
flag=false;
for(int i=1;i<=st.k;++i)
if(st.son[i].start<=addr&&st.son[i].end>=addr){
ans+="."+st.son[i].name,addr-=st.son[i].start,st=s[st.son[i].type];
break;
}else if(i==st.k){
flag=true;
break;
}
if(flag)break;
}
if(flag||st.memory<=addr)puts("ERR");
else cout<<ans<<endl;
}
}
return 0;
}