#include <stdio.h>

int	sp = 0 ;
int	stack[ 100 ] ;
int	mem[ 100 ] ;

void push( int x ) {
	stack[ sp++ ] = x ;
}

int pop() {
	return stack[ --sp ] ;
}

int top() {
	return stack[ sp-1 ] ;
}

// 定数をpush
#define	PUSH_I(VAL)	push(VAL)
// 変数をpush
#define PUSH_V(ADR)	push(mem[ADR])
// popを変数に戻す
#define POP_V(ADR)	mem[ADR]=pop()
// 基本演算
#define	ADD()		{ int ans = pop() ; push( pop() + ans ) ; }
#define	SUB()		{ int ans = pop() ; push( pop() - ans ) ; }
#define	MUL()		{ int ans = pop() ; push( pop() * ans ) ; }
#define	DIV()		{ int ans = pop() ; push( pop() / ans ) ; }
#define	COPY()		{ int ans = top() ; push( ans ) ; }
// 出力
#define OUT()		printf( "%d\n" , pop() )
#define DC(ADR,VAL)	mem[ADR]=VAL

int main() {

	#include "stack-machine.h"

	return 0 ;
}
