#include <bits/stdc++.h>
#define PSI pair<string,int>
#define LL long long
#define ls p<<1
#define rs p<<1|1
using namespace std;
struct Type
{
string ty;
LL m,dt;
vector<PSI>g;
}t[115];
map<string,int>mp;
int N,tyt=4;
LL mem=-1;
LL Delta(LL m,int x)
{
if(m==-1) return 0;
m+=(x-(m%x));
return m;
}
void dfs1(int u,string s,int p,LL m)
{
string ns;
if(p>s.length())
{
m=Delta(m,t[u].dt);
printf("%lld\n",m);
return;
}
for(int i=p;i<s.length();i++)
{
if(i==s.length()-1||s[i]=='.')
{
if(i==s.length()-1) i++;
ns=s.substr(p,i-p);
p=i+1;
break;
}
}
for(int i=0;i<t[u].g.size();i++)
{
string n=t[u].g[i].first;
int v=t[u].g[i].second;
if(n==ns)
{
dfs1(v,s,p,m);
return;
}
m=Delta(m,t[v].dt);
m+=t[v].m-1;
}
return;
}
vector<string>ans;
bool err=0;
void dfs2(int u,LL m,LL ask)
{
if(err) return;
if(t[u].g.size()==0)
{
m=Delta(m,t[u].dt);
LL nm=m+t[u].m-1;
if(ask<m||nm<ask)
{
puts("ERR");
err=1;
return;
}
for(int i=0;i<ans.size();i++)
{
cout<<ans[i];
if(i<ans.size()-1) cout<<".";
}
puts("");
return;
}
bool found=0;
for(int i=0;i<t[u].g.size();i++)
{
if(err) return;
string n=t[u].g[i].first;
int v=t[u].g[i].second;
m=Delta(m,t[v].dt)-1;
LL l=m+1;
LL r=l+t[v].m-1;
if(ask<l)
{
if(err) return;
err=1;
puts("ERR");
return;
}
if(ask<=r)
{
ans.push_back(n);
dfs2(v,m,ask);
found=1;
return;
}
m=r;
}
if(err) return;
if(!found) puts("ERR"),err=1;
return;
}
int main()
{
scanf("%d",&N);
t[1].ty="byte",t[2].ty="short",t[3].ty="int",t[4].ty="long";
t[1].m=t[1].dt=1,t[2].m=t[2].dt=2,t[3].m=t[3].dt=4,t[4].m=t[4].dt=8;
mp["byte"]=1,mp["short"]=2,mp["int"]=3,mp["long"]=4;
while(N--)
{
int opt;
scanf("%d",&opt);
if(opt==1)
{
string nam;
int K;
cin>>nam;
scanf("%d",&K);
t[++tyt].ty=nam;
mp[nam]=tyt;
LL m=-1,d=-0;
for(int i=1;i<=K;i++)
{
string typ;
cin>>typ>>nam;
Type v=t[mp[typ]];
d=max(d,v.dt);
m=Delta(m,v.dt);
m+=v.m-1;
t[tyt].g.push_back({nam,mp[typ]});
}
t[tyt].m=Delta(m,d);
t[tyt].dt=d;
printf("%lld %lld\n",t[tyt].m,d);
}
if(opt==2)
{
string typ,nam;
cin>>typ>>nam;
Type v=t[mp[typ]];
mem=Delta(mem,v.dt);
printf("%lld\n",mem);
mem+=v.m-1;
t[114].g.push_back({nam,mp[typ]});
}
if(opt==3)
{
string s;
cin>>s;
dfs1(114,s,0,-1);
}
if(opt==4)
{
LL m;
scanf("%lld",&m);
ans.clear();
err=0;
if(m>mem) puts("ERR");
else
{
dfs2(114,-1,m);
}
}
}
return 0;
}