//このソースコードはpietで書かれたものをc++にコンパイルしたものです。決して闇の呪文ではありません。
const int PUSH=1,POP=2,ADD=10,SUB=11,MULTI=12,DIV=20,MOD=21,NOT=22,GREAT=30,POINT=31,SWITCH=32,DUP=40,ROLL=41,INN=42,INC=50,OUTN=51,OUTC=52;
#include <cstdio>
#include <vector>
#include <stack>
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
struct cal{
int process;
int next;
cal(int p,int n){
	process=p;next=n;
}
bool operator >(const cal &b) const{return process > b.process;}
};
int main(){
	vector<vector<vector<cal>>> proceed(5,vector<vector<cal>>(4,vector<cal>(2,cal(0,0))));
	proceed[0][0][0]=cal(42,1);proceed[0][0][1]=cal(42,1);proceed[0][1][0]=cal(-2,-1);proceed[0][1][1]=cal(-2,-1);proceed[0][2][0]=cal(-1,-1);proceed[0][2][1]=cal(-1,-1);proceed[0][3][0]=cal(-1,-1);proceed[0][3][1]=cal(-1,-1);proceed[1][0][0]=cal(1,2);proceed[1][0][1]=cal(-2,4);proceed[1][1][0]=cal(-2,-1);proceed[1][1][1]=cal(-2,-1);proceed[1][2][0]=cal(-2,-1);proceed[1][2][1]=cal(21,0);proceed[1][3][0]=cal(-1,-1);proceed[1][3][1]=cal(-1,-1);proceed[2][0][0]=cal(20,3);proceed[2][0][1]=cal(20,3);proceed[2][1][0]=cal(-2,-1);proceed[2][1][1]=cal(-2,-1);proceed[2][2][0]=cal(2,1);proceed[2][2][1]=cal(2,1);proceed[2][3][0]=cal(-1,-1);proceed[2][3][1]=cal(-1,-1);proceed[3][0][0]=cal(51,4);proceed[3][0][1]=cal(51,4);proceed[3][1][0]=cal(-2,4);proceed[3][1][1]=cal(-2,4);proceed[3][2][0]=cal(40,2);proceed[3][2][1]=cal(40,2);proceed[3][3][0]=cal(-1,-1);proceed[3][3][1]=cal(-1,-1);proceed[4][0][0]=cal(-2,-1);proceed[4][0][1]=cal(-2,-1);proceed[4][1][0]=cal(-2,-1);proceed[4][1][1]=cal(-2,-1);proceed[4][2][0]=cal(-2,-1);proceed[4][2][1]=cal(-2,-1);proceed[4][3][0]=cal(-1,-1);proceed[4][3][1]=cal(-1,-1);
	vector<int> codelblock;
	codelblock.push_back(1);codelblock.push_back(3);codelblock.push_back(1);codelblock.push_back(1);codelblock.push_back(6);

	stack<ll> st;
	int nowgroup=0;
	int dp=0;
	int cc=0;
	int endcount=0;
	while(endcount<8){
		if(proceed[nowgroup][dp][cc].process==-1 || proceed[nowgroup][dp][cc].next==-1){
			if(endcount%2==0)
				cc=(cc+1)%2;
			else
				dp=(dp+1)%4;
			endcount++;
		}else{
			bool flag=true;
			endcount=0;
			if(proceed[nowgroup][dp][cc].process==PUSH)
				st.push(codelblock[nowgroup]);
			else if(proceed[nowgroup][dp][cc].process==POP)
				st.pop();
			else if(proceed[nowgroup][dp][cc].process==ADD){
				ll a=st.top();st.pop();
				ll b=st.top();st.pop();
				st.push(b+a);
			}else if(proceed[nowgroup][dp][cc].process==SUB){
				ll a=st.top();st.pop();
				ll b=st.top();st.pop();
				st.push(b-a);
			}else if(proceed[nowgroup][dp][cc].process==MULTI){
				ll a=st.top();st.pop();
				ll b=st.top();st.pop();
				st.push(b*a);
			}else if(proceed[nowgroup][dp][cc].process==DIV){
				ll a=st.top();st.pop();
				ll b=st.top();st.pop();
				st.push(b/a);
			}else if(proceed[nowgroup][dp][cc].process==MOD){
				ll a=st.top();st.pop();
				ll b=st.top();st.pop();
				st.push(b%a);
			}else if(proceed[nowgroup][dp][cc].process==NOT){
				ll a=st.top();st.pop();
				if(a!=0) st.push(0);
				else st.push(1);
			}else if(proceed[nowgroup][dp][cc].process==GREAT){
				ll a=st.top();st.pop();
				ll b=st.top();st.pop();
				st.push(a<b);
			}else if(proceed[nowgroup][dp][cc].process==POINT){
				ll a=st.top();st.pop();
				nowgroup=proceed[nowgroup][dp][cc].next;
				dp=(dp+a%4)%4;
				flag=false;
			}else if(proceed[nowgroup][dp][cc].process==SWITCH){
				ll a=st.top();st.pop();
				nowgroup=proceed[nowgroup][dp][cc].next;
				cc=(cc+a%2)%2;
				flag=false;
			}else if(proceed[nowgroup][dp][cc].process==DUP){
				ll a=st.top();
				st.push(a);
			}else if(proceed[nowgroup][dp][cc].process==ROLL){
				ll b=st.top();st.pop();
				ll a=st.top();st.pop();
				vector<ll> temp(a);
				for(int i=a-1;i>=0;i--){
					temp[i]=st.top();
					st.pop();
				}
				for(int i=0;i<a;i++)
					st.push(temp[(i-b+a)%a]);
			}else if(proceed[nowgroup][dp][cc].process==INN){
				ll a;
				cin >> a;
				st.push(a);
			}else if(proceed[nowgroup][dp][cc].process==INC){
				unsigned char c[5]={0};
				scanf("%c",&c[0]);
				int rest;
				if(c[0]<0x80)
					rest=0;
				else if(c[0]<0xE0)
					rest=1;
				else if(c[0]<0xF0)
					rest=2;
				else
					rest=3;
				for(int i=0;i<rest;i++)
					scanf("%c",&c[i+1]);
				int a=c[0]+(c[1]<<8)+(c[2]<<16)+(c[3]<<24);
				st.push(a);
			}else if(proceed[nowgroup][dp][cc].process==OUTN){
				ll a=st.top();
				st.pop();
				cout << a;
			}else if(proceed[nowgroup][dp][cc].process==OUTC){
				int a=st.top();
				st.pop();
				unsigned char c[5]={0};
				c[0]=a%(1<<8);a=a>>8;
				c[1]=a%(1<<8);a=a>>8;
				c[2]=a%(1<<8);a=a>>8;
				c[3]=a%(1<<8);a=a>>8;
				printf("%s",c);
			}
			if(flag)
				nowgroup=proceed[nowgroup][dp][cc].next;
		}
	}
	return 0;
}


Measured memory_bytes: 256