#include <stdio.h>

//数式の最大の長さ
#define MAXLENGTH 400
//オペランドの最大個数
#define MAXOP 100

void push(int stack[MAXOP], int *sp, int op);
int pop(int stack[MAXOP], int *sp);

int main(void)
{
	//spはスタックのポインタ、opは数式に含まれるオペランドを格納
	int i, sp, op;
	//calc_value1とcalc_value2は計算用のオペランドを格納
	int calc_value1, calc_value2;
	int stack[MAXOP];
	char formual[MAXLENGTH];

	//数式を入力
	scanf("%[^\n]", formual);

	//初期値は0
	sp = 0;
	i = 0;

	//数式の最後まで繰り返す
	while(formual[i] != '\0'){
		//数字ならば数値に変換し、プッシュする
		if(formual[i] >= '0' && formual[i] <= '9'){
			//数値に変換
			op = formual[i] - 48;
			i++;
			//数字が2桁以上の場合の動作
			while(formual[i] != ' '){
				op *= 10;
				op += formual[i] - 48; 
				i++;
			}

			push(stack, &sp, op);
		}
		//演算子ならばポップし、計算する
		else if(formual[i] == '+'){
			calc_value1 = pop(stack, &sp);
			calc_value2 = pop(stack, &sp);

			op = calc_value1 + calc_value2;
			//計算結果をプッシュ
			push(stack, &sp, op);
		}
		else if(formual[i] == '-'){
			calc_value1 = pop(stack, &sp);
			calc_value2 = pop(stack, &sp);

			op = calc_value2 - calc_value1;
			//計算結果をプッシュ
			push(stack, &sp, op);
		}
		else if(formual[i] == '*'){
			calc_value1 = pop(stack, &sp);
			calc_value2 = pop(stack, &sp);

			op = calc_value1 * calc_value2;
			//計算結果をプッシュ
			push(stack, &sp, op);
		}

		//インデックスを増加
		i++;
	}

	//結果をポップし出力
	op = pop(stack, &sp);
	printf("%d\n", op);

	return 0;
}

void push(int stack[100], int *sp, int op)
{
	stack[*sp] = op;
	*sp += 1;
}

int pop(int stack[100], int *sp)
{
	int op;

	*sp -= 1;
	op = stack[*sp];

	return op;
}
