/*1 initialize()
2   top = 0
3
4 isEmpty()
5   return top == 0
6
7 isFull()
8   return top >= MAX - 1
9
10 push(x)
11   if isFull()
12     エラー（オーバーフロー）
13   top++
14   S[top] = x
15
16 pop()
17   if isEmpty()
18     エラー（アンダーフロー）
19   top--
20   return S[top+1]
*/

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

int top = 0 , stack[100];
void push ( int );
int pop ( void);

int main(){
  int x , y , flag =0 , ini ,suuji , res ;
  char c , t , input[100];

  while( scanf("%s", input) != EOF){
    //printf("top %d\n" , top);
    if ( input[0]  == '+' ){
      //printf("one two  %d  %d\n" , stack[top] , stack [top-1] );
      //      top--;
      //printf("res  %d\n", res);
      x = pop();
      y =pop();
      res = x + y;
      push( res);
    } else if ( input[0]== '-' ){
     x = pop();
      y =pop();
      res = y -x;
      push( res);
    } else if ( input[0] == '*' ){
          x = pop();
      y =pop();
      res = x * y;
      push( res);
    
      //  }else if (  == ' '){continue;
      //  }   else if ( c == '\n'){break;
      //}else if ( !(input[0] >= '0' && input[0] <= '9')  ){break;
    }else {
    //  suuji = (int) (c - '0');
    //  while (  1 ){/
    //scanf ("%c" , &t);
    //  if ( !( c >= '0' && c <= '9')){break;}
    //printf("test");
    //	suuji*= 10; suuji += (int) ( t - '0');
    //printf("%d", suuji);
    //  }
      //  suuji  = atoi(input);
      //  printf("suuji %d\n" , suuji);
      //stack[top] = suuji;
      //top++;
      res = atoi(input);
      push (res);
    }
  }
  printf("%d\n", pop());
  return 0;
}

void push ( int in ){
  top++;
  stack[ top] = in;
}

int pop (){
  int ret ;
  ret = stack [ top];
  top--;
  return ret;
}
