#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define endl '\n'
#define itn int
#define pi pair<int,int>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define int ll
using namespace std;
const int MOD1=1e9+7;
const int MOD2=998244353;
const int N=2e2+5;
struct Child{
int begin_pos,tid;
};
struct Struct{
itn size,align;
map<string,Child> children;
}st[N];
struct Variable{
int begin_pos,tid;
};
itn q,op,cnt=4,_size;
map<string,int> structs;
map<string,Variable> var;
inline int calc(int x,itn y){
return (x+y-1)/y*y;
}
inline void Solve(){
cin>>q;
st[0].size=st[0].align=1;
st[1].size=st[1].align=2;
st[2].size=st[2].align=4;
st[3].size=st[3].align=8;
structs["byte"]=0;
structs["short"]=1;
structs["int"]=2;
structs["long"]=3;
while(q--){
cin>>op;
if(op==1){
int k;
string t,n,s;
cin>>s>>k;
Struct &_=st[cnt];
for(int i=1;i<=k;i++){
cin>>t>>n;
int tid=structs[t];
int size=st[tid].size;
int align=st[tid].align;
_.size=calc(_.size,align);
_.align=max(_.size,align);
_.children[n]={_.size,tid};
_.size+=size;
}
_.size=calc(_.size,_.align);
structs[s]=cnt;
cnt++;
cout<<_.size<<' '<<_.align<<endl;
}
if(op==2){
string t,n;
cin>>t>>n;
int tid=structs[t];
_size=calc(_size,st[tid].align);
var[n]={tid,_size};
cout<<_size<<endl;
_size+=st[tid].size;
}
if(op==3){
string s;
cin>>s;
vector<string> v;
int pos;
while(pos=s.find('.')!=-1){
v.pb(s.substr(0,pos));
s=s.substr(pos+1,s.size()-pos-1);
}
v.pb(s);
int tid=var[v[0]].tid;
itn addr=var[v[0]].begin_pos;
v.erase(v.begin());
for(string sub:v){
Child ch=st[tid].children[sub];
tid=ch.tid;
addr+=ch.begin_pos;
}
cout<<addr<<endl;
}
if(op==4){
itn addr;
cin>>addr;
int begin_pos=0;
itn tid=-1;
string name;
vector<string> v;
for(auto it:var){
int pos=it.second.begin_pos;
if(pos<=addr and pos>=begin_pos){
begin_pos=pos;
tid=it.second.tid;
name=it.first;
}
}
if(tid==-1 or addr-begin_pos>=st[tid].size){
cout<<"ERR"<<endl;
return;
}
string vname=name;
while(!st[tid].children.empty()){
addr-=begin_pos;
begin_pos=0;
int nid=-1;
for(auto it:st[tid].children){
int pos=it.second.begin_pos;
if(pos<=addr and pos>=begin_pos){
begin_pos=pos;
nid=it.second.tid;
name=it.first;
}
}
if(nid==-1 or addr-begin_pos>=st[nid].size){
cout<<"ERR"<<endl;
return;
}
v.pb(name);
tid=nid;
}
cout<<vname;
for(string s:v)
cout<<'.'<<s;
cout<<endl;
}
}
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int T=1;
while(T--)
Solve();
return 0;
}