#include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,a,b) for (int i = (a); i <= (b); ++i) #define FORI(i,n) REP(i,1,n) #define FOR(i,n) REP(i,0,int(n)-1) #define mp make_pair #define pb push_back #define pii pair #define vi vector #define ll long long #define SZ(x) ((int)(x.size())) #define IN(x,y) ((y).find((x)) != (y).end()) #define DBG(v) cerr << #v << " = " << (v) << endl; #define FOREACH(i,t) for (typeof (t.begin()) i = t.begin(); i != t.end(); i++) #define fi first #define se second char buf[12000]; #define MAXX 1000000000 int main () { /*DBG(13 / (-4)) DBG((-13) % 4) DBG((-13) % (-4))*/ while(1) { vi program, numbers; while (1) { scanf("%s",buf); string s(buf); if (s == "QUIT") return 0; if (s == "END") break; else if (s == "NUM") { int n; scanf("%d",&n); program.pb(0); numbers.pb(n); } else if (s == "POP") program.pb(1); else if (s == "INV") program.pb(2); else if (s == "DUP") program.pb(3); else if (s == "SWP") program.pb(4); else if (s == "ADD") program.pb(5); else if (s == "SUB") program.pb(6); else if (s == "MUL") program.pb(7); else if (s == "DIV") program.pb(8); else if (s == "MOD") program.pb(9); } int tests; scanf("%d",&tests); while (tests--) { vi stack; bool failure = 0; int numberspos = 0; int stackstart; scanf("%d",&stackstart); stack.pb(stackstart); #define FAIL(t) if ((t)) { failure = 1; break; } FOR(i,SZ(program)) { int instr = program[i]; if (instr <= 4) { if (instr <= 2) { if (instr == 0) { // num stack.pb(numbers[numberspos++]); } else if (instr == 1) { // pop FAIL(stack.empty()) stack.pop_back(); } else { // inv FAIL(stack.empty()) stack[SZ(stack)-1] = -stack[SZ(stack)-1]; } } else if (instr == 3) { // dup FAIL(stack.empty()) stack.pb(stack.back()); } else { // swp int sz = SZ(stack); FAIL(sz < 2) swap(stack[sz-1],stack[sz-2]); } } else { if (instr <= 7) { if (instr == 5) { // add int sz = SZ(stack); FAIL(sz < 2) int res = stack[sz-1] + stack[sz-2]; FAIL(abs(res) > MAXX) stack.pop_back(); stack.pop_back(); stack.pb(res); } else if (instr == 6) { // sub int sz = SZ(stack); FAIL(sz < 2) int res = stack[sz-2] - stack[sz-1]; FAIL(abs(res) > MAXX) stack.pop_back(); stack.pop_back(); stack.pb(res); } else { // mul int sz = SZ(stack); FAIL(sz < 2) ll res = (ll)stack[sz-1] * stack[sz-2]; FAIL(abs(res) > MAXX) stack.pop_back(); stack.pop_back(); stack.pb(res); } } else if (instr == 8) { // div int sz = SZ(stack); FAIL(sz < 2) FAIL(stack[sz-1] == 0) int res = stack[sz-2] / stack[sz-1]; FAIL(abs(res) > MAXX) stack.pop_back(); stack.pop_back(); stack.pb(res); } else { // mod int sz = SZ(stack); FAIL(sz < 2) FAIL(stack[sz-1] == 0) int res = stack[sz-2] % stack[sz-1]; stack.pop_back(); stack.pop_back(); stack.pb(res); } } } if (failure || SZ(stack) != 1) { printf("ERROR\n"); } else { printf("%d\n",stack.back()); } } printf("\n"); } return 0; }