#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,a,b) for(int i=(a); i<(b); ++i) #define REP(i,n) for(int i=1; i<=(n); ++i) #define pb push_back #define INF 1000000001 #define EPS 10e-9 #define P 1000000007 typedef vector vi; typedef pair pii; #define st first #define nd second typedef long long ll; typedef unsigned long long ull; #define ISDEBUG 1 #define dprintf if(ISDEBUG) printf void PTAB(const vi& t) {FOR(i,0,t.size()) printf("%d ", t[i]); puts("");} #define DPTAB if(ISDEBUG) PTAB enum as { POP=-1, INV=-2, DUP=-3, SWP=-4, ADD=-5, SUB=-6, MUL=-7, DIV=-8,MOD=-9 }; stack stos; vectorprogram; void runprogram() { int w,z; ll llw; for(int f=0;f=0) stos.push(program[f]); if(program[f]==POP) if(stos.empty()) return; else stos.pop(); if(program[f]==INV) { if(stos.empty()) return; w=stos.top(); stos.pop(); stos.push(-1*w); } if(program[f]==DUP) { if(stos.empty()) return; w=stos.top(); stos.push(w); } if(program[f]==SWP) { if(stos.empty()) return; if(stos.size()==1) {stos.pop(); return;} w=stos.top(); stos.pop(); z=stos.top(); stos.pop(); stos.push(z); stos.push(w); } if(program[f]==ADD) { if(stos.empty()) return; if(stos.size()==1) {stos.pop(); return;} w=stos.top(); stos.pop(); z=stos.top(); stos.pop(); llw=(ll)w+(ll)z; if(llw<-1000000000||llw>1000000000) { while(!stos.empty()) stos.pop(); return; } stos.push((int)llw); } if(program[f]==SUB) { if(stos.empty()) return; if(stos.size()==1) {stos.pop(); return;} w=stos.top(); stos.pop(); z=stos.top(); stos.pop(); llw=(ll)z-(ll)w; if(llw<-1000000000||llw>1000000000) { while(!stos.empty()) stos.pop(); return; } stos.push((int)llw); } if(program[f]==MUL) { if(stos.empty()) return; if(stos.size()==1) {stos.pop(); return;} w=stos.top(); stos.pop(); z=stos.top(); stos.pop(); llw=(ll)z*(ll)w; if(llw<-1000000000||llw>1000000000) { while(!stos.empty()) stos.pop(); return; } stos.push((int)llw); } if(program[f]==DIV) { if(stos.empty()) return; if(stos.size()==1) {stos.pop(); return;} w=stos.top(); stos.pop(); z=stos.top(); stos.pop(); if(w==0) { while(!stos.empty()) stos.pop(); return; } llw=(ll)z/(ll)w; if(llw<-1000000000||llw>1000000000) { while(!stos.empty()) stos.pop(); return; } stos.push((int)llw); } if(program[f]==MOD) { if(stos.empty()) return; if(stos.size()==1) {stos.pop(); return;} w=stos.top(); stos.pop(); z=stos.top(); stos.pop(); if(w==0) { while(!stos.empty()) stos.pop(); return; } llw=(ll)z%(ll)w; if(llw<-1000000000||llw>1000000000) { while(!stos.empty()) stos.pop(); return; } stos.push((int)llw); } } } int main() { int n,m,x; char ins[10]; ins[0]=0; while(strcmp(ins,"QUIT")!=0) { program.clear(); scanf("%s",ins); while(strcmp(ins,"END")!=0 && strcmp(ins,"QUIT")!=0) { if(strcmp(ins,"POP")==0) program.pb(POP); if(strcmp(ins,"INV")==0) program.pb(INV); if(strcmp(ins,"DUP")==0) program.pb(DUP); if(strcmp(ins,"SWP")==0) program.pb(SWP); if(strcmp(ins,"ADD")==0) program.pb(ADD); if(strcmp(ins,"SUB")==0) program.pb(SUB); if(strcmp(ins,"MUL")==0) program.pb(MUL); if(strcmp(ins,"DIV")==0) program.pb(DIV); if(strcmp(ins,"MOD")==0) program.pb(MOD); if(strcmp(ins,"NUM")==0) { scanf("%d",&x); program.pb(x); } scanf("%s",ins); } if(strcmp(ins,"QUIT")) { scanf("%d",&n); for(int f=0;f