#include #include #include using namespace std; #define MAX 1000000000 int stack2[2000],s,prog[200006],p,*stack=stack2+5,n; int main() { while (1) { p=0; s=0; char c[5]; while(1) { scanf("%s",c); if (!strcmp(c,"QUIT")){ return 0; } else if(!strcmp(c,"NUM")){ prog[p++]=1; scanf("%d",prog+p); p++; } else if(!strcmp(c,"POP")){ prog[p++]=2; } else if(!strcmp(c,"INV")){ prog[p++]=3; } else if(!strcmp(c,"DUP")){ prog[p++]=4; } else if(!strcmp(c,"SWP")){ prog[p++]=5; } else if(!strcmp(c,"ADD")){ prog[p++]=6; } else if(!strcmp(c,"SUB")){ prog[p++]=7; } else if(!strcmp(c,"MUL")){ prog[p++]=8; } else if(!strcmp(c,"DIV")){ prog[p++]=9; } else if(!strcmp(c,"MOD")){ prog[p++]=10; } else if(!strcmp(c,"END")){ prog[p++]=0; break; } } scanf("%d",&n); for (int i=0; iMAX || stack[s]<-MAX) goto failure; break; case 7: stack[s-1]-=stack[s]; s--; if (stack[s]>MAX || stack[s]<-MAX) goto failure; break; case 8: l = stack[s]*((long long )(stack[s-1])); if (l>MAX || l<-MAX) goto failure; stack[--s]=l; break; case 9: if (stack[s]==0) goto failure; stack[s-1]/=stack[s]; s--; break; case 10: if (stack[s]==0) goto failure; int w=abs(stack[s-1])%abs(stack[s]); if (stack[s-1]<0) w=-w; stack[--s]=w; break; } if (s<-1) { goto failure; } } if (s!=0) { failure: printf("ERROR\n"); } else { printf("%d\n",stack[0]); } } printf("\n"); } }