#include #include using namespace std; char program[100000]; int param[100000]; char ins[4]; int n, m, a; int stack[1000], stack_size; bool exec(int p) { stack[0] = p; stack_size = 0; long long r; for (int i = 0; i < n; i++) { switch (program[i]) { case 'N': stack[++stack_size] = param[i]; break; case 'P': if (stack_size == -1) return false; stack_size--; break; case 'I': if (stack_size == -1) return false; stack[stack_size] *= -1; break; case 'D': if (stack_size == -1) return false; stack[stack_size + 1] = stack[stack_size]; stack_size++; break; case 'S': if (stack_size <= 0) return false; swap(stack[stack_size], stack[stack_size - 1]); break; case 'A': if (stack_size <= 0) return false; stack[stack_size - 1] += stack[stack_size]; stack_size--; if (abs(stack[stack_size]) > 1000000000) return false; break; case 'O': if (stack_size <= 0) return false; stack[stack_size - 1] -= stack[stack_size]; stack_size--; if (abs(stack[stack_size]) > 1000000000) return false; break; case 'M': if (stack_size <= 0) return false; r = (long long)stack[stack_size - 1] * stack[stack_size]; if (abs(r) > 1000000000) return false; stack[--stack_size] = r; break; case 'X': if (stack_size <= 0 || stack[stack_size] == 0) return false; stack[stack_size - 1] /= stack[stack_size]; stack_size--; break; case 'Y': if (stack_size <= 0 || stack[stack_size] == 0) return false; stack[stack_size - 1] %= stack[stack_size]; stack_size--; break; } } if (stack_size != 0) return false; printf("%d\n", stack[0]); return true; } int main() { while (true) { for (n = 0; ; n++) { scanf("%s", ins); if (ins[0] == 'E') break; if (ins[0] == 'Q') return 0; program[n] = ins[0]; if (ins[0] == 'S' && ins[1] == 'U') program[n] = 'O'; if (ins[0] == 'D' && ins[1] == 'I') program[n] = 'X'; if (ins[0] == 'M' && ins[1] == 'O') program[n] = 'Y'; if (ins[0] == 'N') { scanf("%d", param + n); } } scanf("%d", &m); for (int i = 0; i < m; i++) { scanf("%d", &a); if (!exec(a)) { printf("ERROR\n"); } } printf("\n"); } }