#include #include #include #include #include #define CHK if(st.empty()) FAIL #define FAIL { fail=true; return; } #define MILLIARD 1000000000 #define RNG(x) if(LLIabs((x))>MILLIARD) FAIL #define LLI long long int #define POP st.pop(); #define TOP st.top() #define PROGRAM false #define INPUT true using namespace std; LLI LLIabs(LLI x) { if(x<0) return -x; return x; } int sgn(LLI a) { if(a<0) return -1; if(a==0) return 0; return 1; } stack st; LLI numReg=0; bool fail=false; void reset() { numReg = 0; while(!st.empty()) st.pop(); fail = false; } void add() { CHK LLI right = TOP; POP CHK LLI left = TOP; POP LLI added=left+right; RNG(added) st.push(added); } void pop() { CHK st.pop(); } void inv() { CHK LLI top = TOP; POP st.push(-top); } void dup() { CHK st.push(TOP); } void swp() { CHK LLI a = TOP; POP CHK LLI b = TOP; POP st.push(a); st.push(b); } void num() { RNG(numReg) st.push(numReg); } void sub() { CHK LLI b = TOP; POP CHK LLI a = TOP; POP LLI q = a-b; RNG(q) st.push(q); } void mul() { CHK LLI a = TOP; POP CHK LLI b = TOP; POP LLI q = a*b; RNG(q) st.push(q); } void div() { CHK LLI divisor = TOP; POP CHK LLI dividend = TOP; POP if(divisor == 0) FAIL LLI q = LLIabs(dividend) / LLIabs(divisor); if(sgn(divisor) * sgn(dividend) == -1) q*=-1; RNG(q) st.push(q); } void mod() { CHK LLI divisor = TOP; POP CHK LLI dividend = TOP; POP if(divisor == 0) FAIL LLI q = LLIabs(dividend) % LLIabs(divisor); q*=sgn(dividend); RNG(q) st.push(q); } char buf[1024]; int main() { while(true) { memset(buf,0,1024); vector prog; while(strcmp(buf,"END")!=0) { scanf("%[^\n]",buf); fgetc(stdin); if(strcmp(buf,"QUIT")==0) goto end; if(strlen(buf)) prog.push_back(buf); } int tc; scanf("%d",&tc); fgetc(stdin); for(int i=0; i