#include #include #include #include #include #include using namespace std; #define REP(i,n) for(int i=0; i 0 && b < 0) || (b > 0 && a < 0); int res = abs(a) / abs(b); if(mns) res = -res; return res; } int modi(int a, int b){ if(b == 0) return INF + 1; /*int res = abs(a) % abs(b); if(b < 0) res = -res; return res;*/ return a - b * divi(a,b); } struct STACK{ int size; STACK(int x){ tab[0] = x; size = 1; } bool zrob(int operacja){ int op = oper[operacja]; if(op >= SWP && size < 2) return false; if(op >= POP && size < 1) return false; switch(op){ case NUM: tab[size] = par[operacja]; size++; break; case POP: size--; break; case INV: tab[size-1] = -tab[size-1]; break; case DUP: tab[size] = tab[size-1]; size++; break; case SWP: swap(tab[size-1], tab[size-2]); break; case ADD: tab[size-2] += tab[size-1]; if(abs(tab[size-2]) > INF) return false; size--; break; case SUB: tab[size-2] -= tab[size-1]; if(abs(tab[size-2]) > INF) return false; size--; break; case MUL: if(max((long long)tab[size-2] * tab[size-1],(long long)-tab[size-2] * tab[size-1]) > (long long)INF) return false; //tab[size-1] != 0 && INF / abs(tab[size-1]) < abs(tab[size-2])) return false; tab[size-2] *= tab[size-1]; size--; break; case DIV: tab[size-2] = divi(tab[size-2], tab[size-1]); if(abs(tab[size-2]) > INF) return false; size--; break; case MOD: tab[size-2] = modi(tab[size-2], tab[size-1]); if(abs(tab[size-2]) > INF) return false; size--; break; } return true; } }; char inst[100]; void get(int n){ if(inst[0] == 'N'){ oper[n] = NUM; scanf("%d", &par[n]); } else if(inst[0] == 'P') oper[n] = POP; else if(inst[0] == 'I') oper[n] = INV; else if(inst[0] == 'D'){ if(inst[1] == 'I') oper[n] = DIV; else{ oper[n] = DUP; assert(inst[1] == 'U'); } } else if(inst[0] == 'S'){ if(inst[1] == 'W') oper[n] = SWP; else{ oper[n] = SUB; assert(inst[1] == 'U'); } } else if(inst[0] == 'A') oper[n] = ADD; else if(inst[0] == 'M'){ if(inst[1] == 'U') oper[n] = MUL; else{ oper[n] = MOD; assert(inst[1] == 'O'); } } else assert(false); } int main() { //printf("%d\n", modi(-13,4)); //printf("%d\n", modi(-13,-4)); while(true){ scanf("%s", inst); if(inst[0] == 'Q') break; numop = 0; do{ if(inst[0] == 'E') break; get(numop); numop++; scanf("%s", inst); if(inst[0] == 'E') break; } while(true); int N; scanf("%d", &N); while(N--){ int a; scanf("%d", &a); STACK st(a); bool ok = true; REP(i,numop){ if(!st.zrob(i)){ ok = false; break; } } if(!ok || st.size != 1) printf("ERROR\n"); else printf("%d\n", tab[0]); } printf("\n"); } return 0; }