#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define re register
map<pair<string,int>,int>addr;//存储数组名称(pair.first),数组下标(pair.second),该位置的值的大小
map<string,int>siz;//存储数组的大小,防溢出
string a,b;bool conti=true;//判断是否出现不合法情况
struct anss{string name;int sizee;};//方便存储
struct for_find2{string name;int wei;};//方便存储
inline for_find2 find2(string s,int it){//给定a[0](s)与左中括号的下标(it),要找到a
string ans;re int k;
for(k=it;k>=0;k--){
if(s[k]=='['||k==0){
int Max=k+1;
if(k==0) Max--;
for(int i=Max;i<=it;i++){
ans+=s[i];
}
break;
}
}
return (for_find2){ans,k-1};
}
inline anss search(string s){//用于找到真正的地址,处理a[b[c[0]]]的情况
int len=s.size();
re int i;
for(i=len-1;i>=0;i--){
if(s[i]=='['){
i++;break;
}
}
// for(i=0;i<len;i++)
// if(s[i]>='0'&&s[i]<='9')break;
int x=0;
for(re int j=i;j<len;j++){
if(s[j]==']'){
i-=2;break;
}
x=x*10+s[j]-48;
}
for_find2 ty=find2(s,i);i=ty.wei;
if(siz[ty.name]<=x){
if(siz[ty.name]==0)
return (anss){ty.name,x};
cout<<-1<<endl;exit(0);
}
int si=addr[make_pair(ty.name,x)];
while(i>=0){
for_find2 tt=find2(s,i);
i=tt.wei;
if(siz[tt.name]<=si){
if(siz[tt.name]==0)
return (anss){tt.name,si};
cout<<-1<<endl;exit(0);
}
if(i<0){
return (anss){tt.name,si};
}
si=addr[make_pair(tt.name,si)];
}
return (anss){ty.name,x};
}
int main(){
ios::sync_with_stdio(false);
while(1){
cin>>a>>b;
if(a=="int"){
anss type=search(b);
siz[type.name]=type.sizee;
}
else if(a=="cout"){
anss type=search(b);
cout<<addr[make_pair(type.name,type.sizee)]<<endl;
}
else{//给数组赋值的情况
anss type=search(a);int x=0;
for(re int i=0;i<b.size();i++){
x=x*10+b[i]-48;
}
addr[make_pair(type.name,type.sizee)]=x;
}
}
return 0;
}
rt 大悲(