#include #include #include using namespace std; #define NUM 1 #define POP 2 #define INV 3 #define DUP 4 #define SWP 5 #define ADD 6 #define SUB 7 #define MUL 8 #define DIV 9 #define MOD 10 int cnt, n, neg, res; long long a, b; bool failure; int inst[100042]; int param[100042]; char cur[42]; int main() { while (1) { cnt = 0; while (1) { scanf("%s", cur); if (cur[0] == 'Q') goto end; if (cur[0] == 'E') break; if (cur[0] == 'N') { inst[cnt] = NUM; scanf("%d", ¶m[cnt]); } if (cur[0] == 'P') inst[cnt] = POP; if (cur[0] == 'I') inst[cnt] = INV; if (cur[0] == 'D' && cur[1] == 'U') inst[cnt] = DUP; if (cur[0] == 'S' && cur[1] == 'W') inst[cnt] = SWP; if (cur[0] == 'A') inst[cnt] = ADD; if (cur[0] == 'S' && cur[1] == 'U') inst[cnt] = SUB; if (cur[0] == 'M' && cur[1] == 'U') inst[cnt] = MUL; if (cur[0] == 'D' && cur[1] == 'I') inst[cnt] = DIV; if (cur[0] == 'M' && cur[1] == 'O') inst[cnt] = MOD; ++cnt; } // printf("loaded %d instr\n", cnt); int runs; scanf("%d", &runs); while (runs--) { stack s; scanf("%d", &n); s.push(n); failure = false; for (int i = 0; i < cnt; ++i) { switch (inst[i]) { case NUM: s.push(param[i]); break; case POP: if (s.empty()) { failure = true; goto fail; } s.pop(); break; case INV: if (s.empty()) { failure = true; goto fail; } a = s.top(); s.pop(); s.push(-a); break; case DUP: if (s.empty()) { failure = true; goto fail; } a = s.top(); s.push(a); break; case SWP: if (s.size() < 2) { failure = true; goto fail; } a = s.top(); s.pop(); b = s.top(); s.pop(); s.push(a); s.push(b); break; case ADD: if (s.size() < 2) { failure = true; goto fail; } a = s.top(); s.pop(); b = s.top(); s.pop(); if (a+b > 1000000000 || a+b < -1000000000) { failure = true; goto fail; } s.push(a+b); break; case SUB: if (s.size() < 2) { failure = true; goto fail; } a = s.top(); s.pop(); b = s.top(); s.pop(); if (b-a > 1000000000 || b-a < -1000000000) { failure = true; goto fail; } s.push(b-a); break; case MUL: if (s.size() < 2) { failure = true; goto fail; } a = s.top(); s.pop(); b = s.top(); s.pop(); if (a*b > 1000000000 || a*b < -1000000000) { failure = true; goto fail; } s.push(a*b); break; case DIV: if (s.size() < 2) { failure = true; goto fail; } neg = 0; a = s.top(); s.pop(); if (a < 0) { ++neg; a = -a; } if (!a) { failure = true; goto fail; } b = s.top(); s.pop(); if (b < 0) { ++neg; b = -b; } res = b/a; if (neg%2) res = -res; if (res > 1000000000 || res < -1000000000) { failure = true; goto fail; } s.push(res); break; case MOD: if (s.size() < 2) { failure = true; goto fail; } neg = 0; a = s.top(); s.pop(); if (a < 0) { a = -a; } if (!a) { failure = true; goto fail; } b = s.top(); s.pop(); if (b < 0) { ++neg; b = -b; } res = b%a; if (neg) res = -res; if (res > 1000000000 || res < -1000000000) { failure = true; goto fail; } s.push(res); break; } // printf("size:%d\n", s.size()); } fail: ; if (failure || s.size() != 1) { printf("ERROR\n"); } else { printf("%d\n", s.top()); } } putchar('\n'); } end: ; return 0; }