#include #include #include #define ABS(x) ((x) < 0 ? -(x) : (x)) #define MAXN 1000000000LL enum { NUM, POP, INV, DUP, SWP, ADD, SUB, MUL, DIV, MOD }; static int prog[100010][2], stack[1024]; static char s[1024]; int main(void) { for (;;) { int n = 0, q, i, j, sn; for (;;) { gets(s); if (s[0] == 0) continue; else if (strncmp(s, "QUIT", 4) == 0) return 0; else if (strncmp(s, "END", 3) == 0) break; else if (strncmp(s, "NUM", 3) == 0) { prog[n][0] = NUM; prog[n][1] = atoi(s+3); } else if (strncmp(s, "POP", 3) == 0) prog[n][0] = POP; else if (strncmp(s, "INV", 3) == 0) prog[n][0] = INV; else if (strncmp(s, "DUP", 3) == 0) prog[n][0] = DUP; else if (strncmp(s, "SWP", 3) == 0) prog[n][0] = SWP; else if (strncmp(s, "ADD", 3) == 0) prog[n][0] = ADD; else if (strncmp(s, "SUB", 3) == 0) prog[n][0] = SUB; else if (strncmp(s, "MUL", 3) == 0) prog[n][0] = MUL; else if (strncmp(s, "DIV", 3) == 0) prog[n][0] = DIV; else if (strncmp(s, "MOD", 3) == 0) prog[n][0] = MOD; n++; } scanf("%d\n", &q); for (i = 0; i < q; i++) { sn = 1; scanf("%d\n", &stack[0]); for (j = 0; j < n; j++) { long long x; int y; switch(prog[j][0]) { case NUM: stack[sn++] = prog[j][1]; break; case POP: if (sn < 1) goto error; sn--; break; case INV: if (sn < 1) goto error; stack[sn-1] = -stack[sn-1]; break; case DUP: if (sn < 1) goto error; stack[sn] = stack[sn-1]; sn++; break; case SWP: if (sn < 2) goto error; y = stack[sn-1]; stack[sn-1] = stack[sn-2]; stack[sn-2] = y; break; case ADD: if (sn < 2) goto error; x = (long long)stack[sn-1]+(long long)stack[sn-2]; if (ABS(x) > MAXN) goto error; stack[sn-2] = (int)x; sn--; break; case SUB: if (sn < 2) goto error; x = (long long)stack[sn-2]-(long long)stack[sn-1]; if (ABS(x) > MAXN) goto error; stack[sn-2] = (int)x; sn--; break; case MUL: if (sn < 2) goto error; x = (long long)stack[sn-2]*(long long)stack[sn-1]; if (ABS(x) > MAXN) goto error; stack[sn-2] = (int)x; sn--; break; case DIV: if (sn < 2 || stack[sn-1] == 0) goto error; x = (long long)stack[sn-2]/(long long)stack[sn-1]; if (ABS(x) > MAXN) goto error; stack[sn-2] = (int)x; sn--; break; case MOD: if (sn < 2 || stack[sn-1] == 0) goto error; x = (long long)stack[sn-2]%(long long)stack[sn-1]; if (ABS(x) > MAXN) goto error; stack[sn-2] = (int)x; sn--; break; } } if (sn != 1) goto error; printf("%d\n", stack[0]); continue; error: printf("ERROR\n"); } printf("\n"); } }