//逆ポーランド記法
#include<stdio.h>
#include<string.h>

#define STACK_SIZE 100
#define TRUE 1
#define FALSE 0

int stack[STACK_SIZE];
int top=0;

int isEmpty(){
  if(top==0){
    return TRUE;
      }else{
    return FALSE;
      }
}

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

int pop(){
  if(isEmpty()==TRUE){
    printf("error underflow\n");
  }else{
    return stack[top--];
  }
}

int main(){
  int a=0;
  char str[10];
  char input;
  int num;
  int pop1,pop2;

  while(scanf("%c",&input)!=EOF){
    if('0'<=input && input<='9'){
      str[a]=input;
      a++;
    }else if(input==' '){
      str[a]='\0';
      num=atoi(str);
      if(str[0]!='\0')push(num);
      a=0;
    }else if(input=='+'){
      pop2=pop();
      pop1=pop();
      push(pop1+pop2);
    }else if(input=='-'){
      pop2=pop();
      pop1=pop();
      push(pop1-pop2);
    }else if(input=='*'){
      pop2=pop();
      pop1=pop();
      push(pop1*pop2);
    }else{
      continue;
    }
  }

  printf("%d\n",pop());
  return 0;
}