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

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

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 i;
  int c=0;
  int a=0,b=0;
  char input[N];
  char str[10];
  int num;
  int pop1,pop2;

  while(scanf("%c",&input[c])!=EOF){
    c++;
  }
  for(i=0;i<c;i++){

      if(input[i]==' '){
	b=i;
	if('0'<=input[i-1] && input[i-1]<='9'){
	  strncpy(str,input+a,b-a);
	  str[b-a]='\0';
	  num=atoi(str);
	  push(num);
	}
	a=b+1;
      }else if(input[i]=='+'){
	pop2=pop();
	pop1=pop();
	push(pop1+pop2);
      }else if(input[i]=='-'){
	pop2=pop();
	pop1=pop();
	push(pop1-pop2);
      }else if(input[i]=='*'){
	pop2=pop();
	pop1=pop();
	push(pop1*pop2);
      }else{
	continue;
      }
  }


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