// Stack
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 200

void initialize();
int isEmpty();
int isFull();
void push(int);
int pop();


int top, S[1000]; // 一番最後に追加された要素を指す
int S[1000]; // データを格納する配列

int main(){
  int i, n, a, b;
  char str[100];
  initialize();
  top = 0;

  while(scanf("%s", str) != EOF){
    if(str[0] == '+'){ // 演算子"+"が代入されたとき
      a = pop();
      b = pop();
      push(a + b);
    }
    else if(str[0] == '-'){ // 演算子"-"が代入されたとき
      b = pop();
      a = pop();
      push(a - b);
    }
    else if(str[0] == '*'){ // 演算子"*"が代入されたとき
      a = pop();
      b = pop();
      push(a * b);
    }
    else{ // 数値が代入されたとき
      push(atoi(str));
    }
  }
  printf("%d\n", pop()); // 計算結果の表示
  
  return 0;
}

// スタックを空にする
void initialize(){
  top = 0;
}

// スタックが空かどうか確認
int isEmpty(){
  if(top == 0)return 1;
  else return 0;
}

// スタックが満杯かどうか確認
int isFull(){
  if(top >= MAX - 1)return 1;
  else return 0;
}

// スタックに要素xを追加する
void push(int x){
  if(isFull() == 1) exit(8);
  top++;
  S[top] = x;
}

// スタックのトップから要素を取り出す
int pop(){
  if(isEmpty() == 1) exit(8);
  else {
    top--;
    return S[top + 1];
  }
}

