#include<bits/stdc++.h>
#define int long long
using namespace std;
int N,v,tail,v1;
struct node{
string type;
int begin;
int end;
string name;
int basic;
}a[1000005];
struct Struct{
string name;
string t[105];
string n[105];
}aa[1005];
map<string,int> mp;
map<string,int> dq;
map<string,int> num;
void built(string t,string n,string fa)
{
v++;
if(t=="byte"||t=="short"||t=="int"||t=="long"){
a[v].type=t;
a[v].name=fa+"."+n;
a[v].basic=1;
int len=mp[t];
if(tail%len!=0)
{
tail=tail/len*len+len;
}
a[v].begin=tail;
a[v].end=tail+len-1;
tail=tail+len;
}
else{
int vvv=v;
int m;
a[v].type=t;
a[v].name=fa+"."+n;
a[v].basic=0;
for(int j=1;j<=v1;j++)
{
if(aa[j].name==t)
{
m=j;
break;
}
}
int len=mp[t],l=dq[t];
if(tail%l!=0)
{
tail=tail/l*l+l;
}
a[v].begin=tail;
a[v].end=tail+len-1;
tail=tail;
for(int j=1;j<=num[t];j++)
{
built(aa[m].t[j],aa[m].n[j],a[vvv].name);
}
}
}
signed main()
{
cin>>N;
mp["byte"]=1;
mp["short"]=2;
mp["int"]=4;
mp["long"]=8;
dq["byte"]=1;
dq["short"]=2;
dq["int"]=4;
dq["long"]=8;
for(int i=1;i<=N;i++)
{
int op;
cin>>op;
if(op==1)
{
v1++;
string s;
int k;
cin>>s>>k;
aa[v1].name=s;
int len=0,cnt=0;
num[s]=k;
for(int j=1;j<=k;j++)
{
cin>>aa[v1].t[j]>>aa[v1].n[j];
int l=mp[aa[v1].t[j]];
int ll=dq[aa[v1].t[j]];
if(len%ll==0) len+=l;
else len=len/ll*ll+ll+l;
cnt=max(cnt,ll);
}
if(len%cnt!=0) len=len/cnt*cnt+cnt;
mp[s]=len;
dq[s]=cnt;
cout<<len<<" "<<cnt<<endl;
}
if(op==2)
{
v++;
string t,n;
cin>>t>>n;
if(t=="byte"||t=="short"||t=="int"||t=="long")
{
a[v].type=t;
a[v].name=n;
a[v].basic=1;
int len=mp[t];
if(tail%len!=0)
{
tail=tail/len*len+len;
}
a[v].begin=tail;
a[v].end=tail+len-1;
tail=tail+len;
cout<<a[v].begin<<endl;
}
else{
int m;
a[v].type=t;
a[v].name=n;
a[v].basic=0;
for(int j=1;j<=v1;j++)
{
if(aa[j].name==t)
{
m=j;
break;
}
}
int len=mp[t],l=dq[t];
if(tail%l!=0)
{
tail=tail/l*l+l;
}
a[v].begin=tail;
a[v].end=tail+len-1;
tail=tail;
cout<<a[v].begin<<endl;
for(int j=1;j<=num[t];j++)
{
built(aa[m].t[j],aa[m].n[j],n);
}
if(tail%l!=0) tail=tail/l*l+l;
}
}
if(op==3)
{
string s;
cin>>s;
for(int i=1;i<=v;i++)
{
if(a[i].name==s)
{
cout<<a[i].begin<<endl;
break;
}
}
}
if(op==4)
{
int addr,f=1;
cin>>addr;
for(int i=1;i<=v;i++)
{
if(a[i].basic)
{
if(addr>=a[i].begin&&addr<=a[i].end)
{
cout<<a[i].name<<endl;
f=0;
break;
}
}
}
if(f==1) cout<<"ERR"<<endl;
}
}
return 0;
}