RT
#include<bits/stdc++.h>
using namespace std;
int h;
string s;
map<int, string>mp;
unordered_map<string, int>bl;
set<int>st;
struct point{
int op;
int h;
string p;
int v;
int nxt;
int to;
}f[3005];
signed main(){
while(getline(cin, s)){
h = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] == ' '){
mp[h] = s.substr(i + 1);
st.insert(h);
break;
}
h = h * 10 + s[i] - '0';
}
}
for(auto to : mp){
int h = to.first;
string str = to.second;
if(str[0] == 'E' && str[1] == 'N'){
f[h].op = -1;
continue;
}
f[h].nxt = *st.upper_bound(h);
if(str[0] == 'I' && str[1] == 'F'){
f[h].op = 0;
for(int i = 3; i < str.size(); i++){
if(str[i] == '='){
i++;
for(; i < str.size(); i++){
if(str[i] == 'G' && str[i + 1] == 'O'){
for(; i < str.size(); i++){
if('0' <= str[i] && str[i] <= '9'){
f[h].to = f[h].to * 10 + str[i] - '0';
}
}
}
if('0' <= str[i] && str[i] <= '9')f[h].v = f[h].v * 10 + str[i] - '0';
}
break;
}
f[h].p += str[i];
}
}else if(str[0] == 'G' && str[1] == 'O'){
f[h].op = 1;
f[h].nxt = 0;
for(int i = 0; i < str.size(); i++){
if('0' <= str[i] && str[i] <= '9')f[h].nxt = f[h].nxt * 10 + str[i] - '0';
}
}else if(str[str.size() - 1] == '?'){
f[h].op = 2;
}else{
f[h].op = 3;
for(int i = 0; i < str.size(); i++){
if(str[i] =='+'){
i++;
for(; i < str.size(); i++){
f[h].v = f[h].v * 10 + str[i] - '0';
}
break;
}
f[h].p += str[i];
}
}
}
int now = (*mp.begin()).first;
int ans = 0;
while(ans <= 1e7){
ans++;
if(f[now].op == -1){
break;
}
if(f[now].op == 0){
if(bl[f[now].p] == f[now].v)now = f[now].to;
else now = f[now].nxt;
}else if(f[now].op == 1){
now = f[now].nxt;
}else if(f[now].op == 2){
now = f[now].nxt;
}else if(f[now].op == 3){
bl[f[now].p] += f[now].v;
now = f[now].nxt;
}
}
if(ans > 1e7)puts("-1");
else cout << ans << endl;
return 0;
}
10 A+1
20 IF A=5 GO 60
60 END
30 A+2
40 A?
50 GO 20