#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define DEBUG(x) cout << '>' << #x << ':' << x << endl; #define FOR(i, a, b) for (int i = (a); i < (b); ++i) #define FOR2(i, a, b) for (int i = (a); i > (b); --i) inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; } const int INF = 1<<29; typedef long long ll; char instr[10]; const int MAX = 1000000000; struct op { int type, val; //num - 0 //pop - 1 //inv - 2 //dup - 3 //swp - 4 //add - 5 //sub - 6 //mul - 7 //div - 8 //mod - 9 } input[100001]; int N; ll stack[1047]; int sz; bool eval() { FOR(i, 0, N) { if (input[i].type == 0) //num { stack[sz++] = input[i].val; } else if (input[i].type == 1) //pop { --sz; } else if (input[i].type == 2) //inv { stack[sz-1] = -stack[sz-1]; } else if (input[i].type == 3) //dup { stack[sz] = stack[sz-1]; ++sz; } else if (input[i].type == 4) //swp { swap(stack[sz-1], stack[sz-2]); } else if (input[i].type == 5) //add { ll r = stack[sz-1] + stack[sz-2]; sz -= 2; if (r < -MAX || r > MAX) return false; stack[sz++] = r; } else if (input[i].type == 6) //sub { ll r = stack[sz-2] - stack[sz-1]; sz -= 2; if (r < -MAX || r > MAX) return false; stack[sz++] = r; } else if (input[i].type == 7) //mul { ll r = stack[sz-2] * stack[sz-1]; sz -= 2; if (r < -MAX || r > MAX) return false; stack[sz++] = r; } else if (input[i].type == 8) //div { if (stack[sz-1] == 0) return false; ll r = stack[sz-2] / stack[sz-1]; sz -= 2; if (r < -MAX || r > MAX) return false; stack[sz++] = r; } else if (input[i].type == 9) //mod { if (stack[sz-1] == 0) return false; ll r = stack[sz-2] % stack[sz-1]; sz -= 2; if (r < -MAX || r > MAX) return false; stack[sz++] = r; } } return true; } int main() { while (true) { N = 0; int sz2 = 1, n; bool ok = true, reset = false; ll reseted = -1; while (true) { scanf("%s", instr); if (instr[0] == 'Q') return 0; //quit if (instr[0] == 'E') break; //end if (instr[0] == 'N') //num { scanf("%d", &n); input[N].type = 0; input[N].val = n; ++sz2; } else if (instr[0] == 'P') //pop { input[N].type = 1; --sz2; if (sz2 < 0) ok = false; if (sz2 == 0) { reset = true; N = -1; } } else if (instr[0] == 'I') //inv { input[N].type = 2; if (sz2 == 0) ok = false; } else if (instr[0] == 'D' && instr[1] == 'U') //dup { input[N].type = 3; if (sz2 == 0) ok = false; ++sz2; } else if (instr[0] == 'S' && instr[1] == 'W') //swp { input[N].type = 4; if (sz2 < 2) ok = false; } else if (instr[0] == 'A') //add { input[N].type = 5; if (sz2 < 2) ok = false; --sz2; } else if (instr[0] == 'S' && instr[1] == 'U') //sub { input[N].type = 6; if (sz2 < 2) ok = false; --sz2; } else if (instr[0] == 'M' && instr[1] == 'U') //mul { input[N].type = 7; if (sz2 < 2) ok = false; --sz2; } else if (instr[0] == 'D' && instr[1] == 'I') //div { input[N].type = 8; if (sz2 < 2) ok = false; --sz2; } else if (instr[0] == 'M' && instr[1] == 'O') //mod { input[N].type = 9; if (sz2 < 2) ok = false; --sz2; } ++N; } /*DEBUG(ok); DEBUG(sz2); DEBUG(reset);*/ if (sz2 != 1) ok = false; if (ok && reset) { sz = 0; ok = eval(); reseted = stack[0]; } /*DEBUG(ok); DEBUG(sz2); DEBUG(reset); DEBUG(ok); DEBUG(sz2); DEBUG(reseted);*/ int M; scanf("%d", &M); FOR(step, 0, M) { int x; scanf("%d", &x); if (!ok) printf("ERROR\n"); else if (reset) printf("%lld\n", reseted); else { stack[0] = x; sz = 1; bool ok2 = eval(); if (!ok2) printf("ERROR\n"); else printf("%lld\n", stack[0]); } } printf("\n"); } return 0; }