#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL n,op,k,addr;
string s,t,m,ans;
unordered_map<string,LL> room,tab;
unordered_map<string,string> type;
unordered_map<string,vector<pair<string,string> > > member;
vector<string> vec,vis;
LL getadd(LL f,string g,LL h)
{
if(f==(int)vis.size()) return h+(h%tab[g]?tab[g]-(h%tab[g]):0);
string pre;
for(int i=0;i<(int)member[g].size();i++)
{
if(member[g][i].first!=vis[f])
{
string p=member[g][i].second;
if(h%tab[p]) h+=tab[p]-(h%tab[p]);
h+=room[p];
}
else
{
pre=member[g][i].second;
break;
}
}
h=getadd(f+1,pre,h);
return h;
}
LL getting(string g,LL h)
{
LL cnt=h,c=0;
string pre;
for(int i=0;i<=(int)member[g].size();i++)
if(cnt<=k)
{
if(i==(int)member[g].size()) {c=1;break;}
string p=member[g][i].second;
if(cnt%tab[p]) cnt+=tab[p]-(cnt%tab[p]);
if(cnt>k) {c=1;break;}
cnt+=room[p];
if(cnt>k&&(p=="byte"||p=="int"||p=="short"||p=="long"))
{
ans+="."+member[g][i].first;
return 1;
}
if(cnt>k)
{
cnt-=room[p],pre=member[g][i].second;
ans+="."+member[g][i].first;
break;
}
}
if(c==1) return -1;
cnt=getting(pre,cnt);
return cnt;
}
int main()
{
cin>>n;
room["byte"]=1,tab["byte"]=1;
room["short"]=2,tab["short"]=2;
room["int"]=4,tab["int"]=4;
room["long"]=8,tab["long"]=8;
while(n--)
{
cin>>op;
if(op==1)
{
cin>>s>>k;
LL space=0,delta=0;
for(int i=1;i<=k;i++)
{
cin>>t>>m;
member[s].push_back(make_pair(m,t));
if(space%tab[t]) space+=tab[t]-(space%tab[t]);
space+=room[t];
delta=max(delta,tab[t]);
}
if(space%delta) space+=delta-(space%delta);
room[s]=space,tab[s]=delta;
cout<<space<<' '<<delta<<'\n';
}
else if(op==2)
{
cin>>t>>m;
type[m]=t;
vec.push_back(m);
if(addr%tab[t]) addr+=tab[t]-(addr%tab[t]);
cout<<addr<<'\n';
addr+=room[t];
}
else if(op==3)
{
while(!vis.empty()) vis.pop_back();
cin>>s;
string pre="";
for(int i=0;i<(int)s.size();i++)
if(s[i]=='.') vis.push_back(pre),pre="";
else pre+=s[i];
vis.push_back(pre),pre="";
LL cnt=0;
for(int i=0;i<(int)vec.size();i++)
if(vec[i]!=vis[0])
{
string p=type[vec[i]];
if(cnt%tab[p]) cnt+=tab[p]-(cnt%tab[p]);
cnt+=room[p];
}
else
{
pre=type[vec[i]];
break;
}
cnt=getadd(1,pre,cnt);
cout<<cnt<<'\n';
}
else if(op==4)
{
cin>>k;
LL cnt=0,c=0;
string pre;
ans="";
for(int i=0;i<=(int)vec.size();i++)
if(cnt<=k)
{
if(i==(int)vec.size()) {c=1;break;}
string p=type[vec[i]];
if(cnt%tab[p]) cnt+=tab[p]-(cnt%tab[p]);
if(cnt>k) {c=1;break;}
cnt+=room[p];
if(cnt>k&&(p=="byte"||p=="int"||p=="short"||p=="long"))
{
cnt=-2;
ans+=vec[i];
break;
}
if(cnt>k)
{
cnt-=room[p],pre=type[vec[i]];
ans+=vec[i];
break;
}
}
if(c==1) cnt=-1;
else if(cnt!=-2) cnt=getting(pre,cnt);
if(cnt==-1) cout<<"ERR"<<'\n';
else cout<<ans<<'\n';
}
}
return 0;
}