#include <stdio.h>
#include <stdlib.h>
#define STACK_MAX  20               /* スタックサイズ */
#define STACK_OK   0x8000           /* スタック成功を表すデータ */
#define STACK_FULL STACK_OK + 1     /* スタックサイズを超えたときのデータ */
#define STACK_END  STACK_OK + 2     /* スタックの終わりを表すデータ */
/* 関数のプロトタイプ宣言 */
int     push(int);          /* スタックにデータを積む関数 */
int     pop(void);          /* スタックからデータを取り出す関数 */
/* グローバル変数 */
int     stack[STACK_MAX];   /* スタック領域 [0] - [19] */
int     stack_pointer = 0;  /* スタックポインタ */

int main(void)
{  int x=0,y=0,n,flag=0,bai,total;
  int i=0,j;
  char data;
  while((scanf("%c",&data)!=EOF)){
      
	  if(data=='+'){
				push(pop()+pop());
	  }
	  else if(data=='-'){
			
				y = pop();
				x = pop();
				push(x-y);
	  }
	  else if(data=='*'){
				x = pop();
				y = pop();
				push(x*y);
	  }
	  else if(data==' '){
	    bai=1;
	    total=0;
	    if(flag>=2){
	      for(j=1;j<=flag;j++){
		
		total+=pop()*bai;
		  bai*=10;
	      }
	      push(total);
	    }
	    flag=0;
	  }
	  else if(data=='\n'){
	    break;
	  }
	  else {
	    n=data-'0';
	    push(n);
	    flag++;
	  }
	}
  printf("%d\n",pop());
    
	return 0;
}
int push(int d)
{
  //printf("check %d\n",d);
  if(stack_pointer >= STACK_MAX)  /* スタックポインタが最大 */
        return(STACK_FULL);         /* STACK_FULLを返す */
    stack[stack_pointer] = d;       /* スタックにデータ格納 */
    ++stack_pointer;                /* スタックポインタに1加算 */
    return(STACK_OK);               /* STACK_OKを返す */
}
int pop(void)
{
    if(stack_pointer == 0)          /* スタックポインタが0 */
        return(STACK_END);          /* STACK_ENDを返す */
    --stack_pointer;                /* スタックポインタから1減算 */
    return(stack[stack_pointer]);   /* スタックのデータを返す */
}


