#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define STACK_SIZE 100

typedef struct{
	int s[STACK_SIZE];
	int top;
}stack_t;

void stack_push(int n, stack_t* st){
	if(st->top>=STACK_SIZE-1){
		printf("error: full stack\n");
	}else{
		st->top++;
		st->s[st->top]=n;
	}
}

int stack_pop(stack_t* st){
	if(st->top<=-1){
		printf("error: empty stack\n");
		return 0;
	}else{
		st->top--;
		return st->s[st->top+1];
	}
}

int main(void){
	char c;
	int i;
	int tmp1,tmp2;
	stack_t st;
	st.top=-1;
	stack_t* stack=&st;
	while(scanf("%c",&c)!=EOF){
		if(c>=48 && c<=57){
			i=(int)c-48;
			while(scanf("%c",&c)!=EOF){
				if(c<48 || c>57)break;
				i*=10;
				i+=(int)c-48;
				
			}
		}
		switch(c){
		case '+':
			tmp1=stack_pop(stack);
			tmp2=stack_pop(stack);
			tmp1+=tmp2;
			stack_push(tmp1,stack);
			scanf("%c",&c);
			break;
		case '-':
			tmp1=stack_pop(stack);
			tmp2=stack_pop(stack);
			tmp1=tmp2-tmp1;
			stack_push(tmp1,stack);
			scanf("%c",&c);
			break;
		case '*':
			tmp1=stack_pop(stack);
			tmp2=stack_pop(stack);
			tmp1*=tmp2;
			stack_push(tmp1,stack);
			scanf("%c",&c);
			break;
		default:
			stack_push(i,stack);
			break;
		}
	}
	printf("%d\n",stack_pop(stack));
	
	return 0;
}


