#include <stdio.h>
# define N 100

int stack[N];
int stack_size =0;

int push(int a);
int hantei(char c[]);
int pop(void);
int number(char c[]);
int calc(char c[]);

int main(){
  char x[N];

  scanf("%[^\n]*s",x);
   printf("%d\n", calc(x));
  
  return 0;
}

int calc(char *s){
  int a,b,n;

  while(*s){
    //数のときはスタックへ
    if(hantei(s)){
      n=number(s);
      push(n);

      while(*s == '-' || *s == '+'){
	s++;
      }
      while(n){
	n/=10;
	s++;
      }
    }
      //オペランドなら計算
      
    else{
	switch(*s){
        case '+':
            a=pop();
            b=pop();
            push(b+a);
	         break;
      case '-':
            a=pop();
            b=pop();
            push(b-a);
	         break;
      case '*':
            a=pop();
            b=pop();
            push(b*a);
	         break;
	}
	s++;
    }
  }
  return pop();
}

// 数か？
int hantei(char *s)
{
    //符あり
    if(*s == '+'  || *s == '-' ){
        s++;
        if(*s >='0' && *s <= '9') return 1;
        return 0;
    }
    //符なし
  if(*s >='0' && *s <= '9') return 1;
  return 0;
}
  //数をとりだす
  int number(char *s){

    int flag=0, n=0;
      if(*s=='+'){
          s++;
      } else if(*s=='-'){
          flag=1;
          s++;
      }
      //文字型に
      while(*s>='0' && *s<='9'){
          n=n*10+(*s - '0');
          s++;
      }
      // 符変えて返す
      if(flag) return -n;
      return n;
  }
  
	//スタックへ
    int push(int a){
        
        stack[stack_size++]=a;
        //stack_size++;
        return 0;
    }
    //スタックから出す
    int pop(){
        if(stack_size <= 0) return 0;
     //   --stack_size;
        return stack[--stack_size];
    }
