#include<bits/stdc++.h>
using namespace std;
unordered_map<string, int> size_2;
unordered_map<string, int> duiqi;
map<string, int> elemented_addr;
unordered_map<string, string> elemented_type;
unordered_map<string, map<string,string>> structure;
map<string, map<string,int>> pianyi;
int main()
{
int n;
cin>>n;
size_2["byte"] = 1;
size_2["short"] = 2;
size_2["int"] = 4;
size_2["long"] = 8;
duiqi["byte"] = 1;
duiqi["short"] = 2;
duiqi["int"] = 4;
duiqi["long"] = 8;
for(int i=0;i<n;i++)
{
int dotype;
cin>>dotype;
if(dotype==1)
{
string s;
cin>>s;
int k;
cin>>k;
int ans=0;
int flag=0;
map<string,string> mp;
map<string,int> mp_2;
for(int j=0;j<k;j++)
{
string t,n;
cin>>t>>n;
mp[n]=t;
ans=((ans+duiqi[t]-1)/duiqi[t])*duiqi[t];
mp_2[n]=ans;
ans+=size_2[t];
flag=max(flag, duiqi[t]);
}
ans=((ans+flag-1)/flag)*flag;
cout<<ans<<" "<<flag<<endl;
structure[s]=mp;
pianyi[s] = mp_2;
size_2[s]=ans;
duiqi[s]=flag;
}
int ans_2=0;
if(dotype==2)
{
string t,n;
cin>>t>>n;
elemented_type[n]=t;
ans_2=((ans_2+duiqi[t]-1)/duiqi[t])*duiqi[t];
cout<<ans_2<<endl;
elemented_addr[n]=ans_2;
duiqi[n]=duiqi[t];
size_2[n]=size_2[t];
ans_2+=size_2[n];
if(t!="byte" && t!="short" && t!="int" && t!="long")
{
structure[n]=structure[t];
}
}
if(dotype==3)
{
string s;
cin>>s;
stringstream ss;
string last_ss;
int flag=0;
if(elemented_type[s]!="byte" && elemented_type[s]!="short" && elemented_type[s]!="int" && elemented_type[s]!="long")
{
for(int k=0;k<s.size();k++)
{
if(s[k]=='.')
{
flag=k;
break;
}
ss << s[k];
}
last_ss=ss.str();
ss.str("");
if(elemented_type[last_ss]!="byte" && elemented_type[last_ss]!="short" && elemented_type[last_ss]!="int" && elemented_type[last_ss]!="long")
{
for(int k=flag+1;k<s.size();k++)
{
if(s[k]=='.')
{
flag=k;
if(structure[last_ss][ss.str()]!="byte" && structure[last_ss][ss.str()]!="short" && structure[last_ss][ss.str()]!="int" && structure[last_ss][ss.str()]!="long")
{
last_ss=structure[last_ss][ss.str()];
ss.str("");
continue;
}
else
{
break;
}
}
ss << s[k];
}
}
cout<<elemented_addr[last_ss]+pianyi[last_ss][ss.str()]<<endl;
}
else
{
cout<<elemented_addr[s]<<endl;
}
}
if(dotype==4)
{
int element;
cin>>element;
string elemented_vary;
int elemented_vary_addr;
stringstream ss;
stringstream ss2;
for(auto pair : elemented_addr)
{
if(element < pair.second)
{
break;
}
elemented_vary = pair.first;
}
string elemented_struct_vary;
if(elemented_type[elemented_vary]!="type" && elemented_type[elemented_vary]!="short" && elemented_type[elemented_vary]!="int" && elemented_type[elemented_vary]!="long")
{
for (auto &pair1: pianyi[elemented_type[elemented_vary]])
{
if(element < pair1.second + elemented_addr[elemented_vary])
{
break;
}
elemented_struct_vary = pair1.first;
}
cout<<elemented_vary <<"."<<elemented_struct_vary;
}
}
}
return 0;
}