whr_AK_j @ 2024-10-23 22:51:35
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
map<string,int>uid;
char a[100005+10][1005];
int b[100005+10][1005];
int len[100005+10];
int n=1,v;
string ss;
int dfs(string s)
{
if(s[0]<='9'&&'0'<=s[0])
{
int cnt=0;
for(int i=0;i<(int)s.size();i++)
{
cnt*=10;
cnt+=(s[i]-'0');
}
return cnt;
}
string cnt,x;
int sum=0,pre;
for(int i=0;i<(int)s.size();i++)
{
if(s[i]=='[')
{
pre=i+1;
break;
}
x+=s[i];
}
for(int i=pre;i<(int)s.size()-1;i++)
{
if(s[i]==']')
{
sum--;
if(sum==0)
{
cnt+=s[i];
break;
}
}
if(s[i]=='[')sum++;
cnt+=s[i];
}
int m=dfs(cnt);
if(m>=mp[x])
{
cout<<-1;
exit(0);
}
return b[uid[x]][m];
}
int main()
{
while(gets(a[n]))
{
len[n]=strlen(a[n]);
n++;
}
n--;
for(int id=1;id<=n;id++)
{
if(a[id][0]=='i')
{
string s;
int pre,cnt=0;
for(int x=4;x<len[id];x++)
{
if(a[id][x]=='[')
{
pre=x+1;
break;
}
s+=a[id][x];
}
for(int x=pre;x<len[id]-1;x++)
{
cnt*=10;
cnt+=(a[id][x]-'0');
}
mp[s]=cnt;
uid[s]=++v;
}
else if(a[id][0]=='c')
{
string s,cnt;
int pre;
for(int i=5;i<len[id];i++)
{
if(a[id][i]=='[')
{
pre=i+1;
break;
}
s+=a[id][i];
}
int sum=0;
for(int i=pre;i<len[id]-1;i++)
{
if(a[id][i]==']')
{
if(sum==0)
{
pre=i+3;
break;
}
sum--;
}
if(a[id][i]=='[')sum++;
cnt+=a[id][i];
}
int w=dfs(cnt);
cout<<b[uid[s]][w]<<"\n";
}
else
{
string s,cnt;
int pre,x=0;
for(int i=0;i<len[id];i++)
{
if(a[id][i]=='[')
{
pre=i+1;
break;
}
s+=a[id][i];
}
int sum=0;
for(int i=pre;i<len[id];i++)
{
if(a[id][i]==']')
{
if(sum==0)
{
pre=i+2;
break;
}
sum--;
}
if(a[id][i]=='[')sum++;
cnt+=a[id][i];
}
for(int i=pre;i<len[id];i++)
{
x*=10;
x+=(a[id][i]-'0');
}
int m;
m=dfs(cnt);
if(m>=mp[s])
{
cout<<-1<<"\n";
return 0;
}
b[uid[s]][m]=x;
}
}
return 0;
}