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

// 顺序存储实现栈， 求逆波兰表达式
 
//const int MAX = 100;
//typedef struct Stack{
//	int top;
//	int data[MAX];
//}Stack; 
//
//InitialStack(Stack &s){
//	s.top = 0; // 初始化 , 规定第一个位置没有元素 
//}
//
//bool isFull(Stack &s){  // 判满 
//	return s.top == MAX-1; 
//}
//
//bool isEmpty(Stack &s){
//	return s.top == 0;
//}

int top, S[1000];

int pop(){
//	if(isEmpty(s))
//		return -1;  // 下溢 
	top--; 
	return S[top+1];
}

void push(int x){
//	if(isFull(s))  
//		return;  // 上溢 
	// 如果是符号
	S[++top] = x;
} 


int main(){
	top = 0; 
	int a,b;
	char c[100];
	while(scanf("%s", c) != EOF){  // 循环输入 
		if(c[0] == '+'){
		 	a = pop();
		 	b = pop();
		 	push(b+a);
		}else if(c[0] == '-'){
			a = pop();
			b = pop();
			push(b-a);
		}else if(c[0] == '*'){
			a = pop();
			b = pop();
			push(b*a);
		}else{
			push(atoi(c)); // atoi把string类型的字符串数字，转换为int类型的数字 
		}
	}
	printf("%d\n", pop());
	return 0;
}
