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

//制約のことを考えられていないような気がする                                                                                                                                     
int top, S[1000];

void push(int x){
  /* topを加算してから                                                                                                                                                           
     その値に挿入 */
  S[++top] = x;
}

int pop(){
  top--;
  /* topが指していた要素を返す */
  return S[top + 1];
  //ここ普通逆じゃないの？                                                                                                                                                       
  //returnしちゃったらtopの値変えられなかったわ笑                                                                                                                                
}

int main(){
  int a, b;
  top = 0;
  char s[100];
  while( scanf("%s", s) != EOF){
    if( s[0] == '+'){
      a = pop();
      b = pop();
      push(a + b);
    }else if( s[0] == '-' ){
      b = pop();
      a = pop();
      push(a - b);
    }else if( s[0] == '*' ){
      a = pop();
      b = pop();
      push( a * b );
    }else{
      push(atoi(s));
    }
}

  printf("%d\n", pop());

  return 0;
}


