#include #include #include #define NUM 0 #define POP 1 #define INV 2 #define DUP 3 #define SWP 4 #define ADD 5 #define SUB 6 #define MUL 7 #define DIV 8 #define MOD 9 #define END 10 int main() { int recipe[200002]; int stack[1005]; while (1) { int rc = 0, sc = 0, n, i, j; char buf[20]; while (1) { scanf("%s", buf); if (!strcmp(buf, "NUM")) { recipe[rc] = NUM; scanf("%d", &recipe[++rc]); } else if (!strcmp(buf, "POP")) { recipe[rc] = POP; } else if (!strcmp(buf, "INV")) { recipe[rc] = INV; } else if (!strcmp(buf, "DUP")) { recipe[rc] = DUP; } else if (!strcmp(buf, "SWP")) { recipe[rc] = SWP; } else if (!strcmp(buf, "ADD")) { recipe[rc] = ADD; } else if (!strcmp(buf, "SUB")) { recipe[rc] = SUB; } else if (!strcmp(buf, "MUL")) { recipe[rc] = MUL; } else if (!strcmp(buf, "DIV")) { recipe[rc] = DIV; } else if (!strcmp(buf, "MOD")) { recipe[rc] = MOD; } else if (!strcmp(buf, "END")) { recipe[rc] = END; } else if (!strcmp(buf, "QUIT")) { return 0; } else { n = atoi(buf); break; } ++rc; } for (i = 0; i < n; ++i) { sc = 0; scanf("%d", &stack[sc++]); for (j = 0; j < rc; ++j) { int a = 0, b = 0; switch (recipe[j]) { case POP: case INV: case DUP: if (sc == 0) { printf("ERROR\n"); goto newRun; } break; case SWP: case ADD: case SUB: case MUL: case DIV: case MOD: if (sc < 2) { printf("ERROR\n"); goto newRun; } b = stack[--sc]; a = stack[--sc]; break; } switch (recipe[j]) { case NUM: stack[sc++] = recipe[++j]; break; case POP: --sc; break; case INV: stack[sc - 1] = -stack[sc - 1]; break; case DUP: stack[sc] = stack[sc - 1]; ++sc; break; case SWP: stack[sc++] = b; stack[sc++] = a; break; case ADD: if ((long long) a + b > 1000000000 || (long long) a + b < -1000000000) { printf("ERROR\n"); goto newRun; } stack[sc++] = a + b; break; case SUB: if ((long long) a - b > 1000000000 || (long long) a - b < -1000000000) { printf("ERROR\n"); goto newRun; } stack[sc++] = a - b; break; case MUL: if ((long long) a * b > 1000000000 || (long long) a * b < -1000000000) { printf("ERROR\n"); goto newRun; } stack[sc++] = a * b; break; case DIV: if (b == 0) { printf("ERROR\n"); goto newRun; } stack[sc++] = a / b; break; case MOD: if (b == 0) { printf("ERROR\n"); goto newRun; } stack[sc++] = a % b; break; case END: if (sc != 1) { printf("ERROR\n"); goto newRun; } printf("%d\n", stack[0]); break; } } newRun: ; } putchar('\n'); } return 0; }