#include #include #define BOUND 1000000000 /*Mistakes : 1) Two for instruction - pop stack I==0 nebo stack I==1 */ long long int stack [1000]; int inst [100000]; long long int numArr [100000]; // int init; int instI, stackI, numI, cases, cLeft, inputs; bool fail; long long int abs(long long int num) { if (num<0) return ( (-1)*num ); else return num; } void push (long long int num) { stack[stackI++]=num; } int top () { return stack[stackI-1]; } void pop () { if (stackI==0) fail=true; stackI--; } void add() { long long int A, B, res; B=top(); pop(); A=top(); pop(); res=A+B; if (res> BOUND || res < -BOUND) fail=true; push (res); } void div () { long long int A, B, res; B=top(); pop(); A=top(); pop(); int sgnA=A>0? 1: -1; int sgnB=B>0? 1: -1; A=abs(A); B=abs(B); if (B==0) fail=true; else { res=A/B; res*=sgnA*sgnB; push(res); } } void dup () { long long int num; num=top(); push(num); } void inv () { long long int num; num=top(); pop(); num*=-1; push(num); } void mod () { long long int A, B, res; B=top(); pop(); A=top(); pop(); int sgnA=A>0? 1: -1; A=abs(A); B=abs(B); if (B==0) fail=true; else { res=A%B; res*=sgnA; push(res); } } void mul () { long long int A, B, res; B=top(); pop(); A=top(); pop(); res=A*B; if (res> BOUND || res < -BOUND) fail=true; push(res); } void pushNum () { push (numArr[numI++]); } void swp () { long long int A, B; A=top(); pop(); B=top(); pop(); push(A); push(B); } //-------------------------------------------------- int main () { int test=0; bool quit=false; char read, currInst[3]; while (!quit) { instI=0; stackI=0; numI=0; while (read=getc(stdin), read!='E' ) { if(test++ > 20) return 0; for (int i=0; i<3; i++){ currInst[i]=read; read=getc(stdin); } switch (currInst[0]) { case 'A': inst[instI++]=1; break; case 'D': if (currInst[1]=='I') inst[instI++]=2; else {inst[instI++]=3;} break; case 'I': inst[instI++]=4; break; case 'M': if (currInst[1]=='O') inst[instI++]=5; else inst[instI++]=6; break; case 'N': inst[instI++]=7; scanf ("%lld", &numArr[numI++]); read=getc(stdin); break; case 'P': inst[instI++]=8; break; case 'S': inst[instI++]=9; break; case 'Q': quit=true; default: //END inst[instI]=0; break; } //mazani odradkovani //read=getc(stdin); if (quit) return 0; } for (int i=0; i<3; i++){ currInst[i]=read; read=getc(stdin); } /*cases=0; while (read!='\n') { cases*=10; cases+=read-'0'; read=getc(stdin); }*/ scanf("%d", &cases); /*for (int i=0; i0) fail=true; if (fail) printf ("ERROR\n"); else printf ("%lld\n", res); } read=getc(stdin); read=getc(stdin); printf("\n"); } return 0; }