#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
typedef struct{
    int o;
}STACK;

int getInt(char o[]){
    int i;
    int len,result=0;
    len=strlen(o);
    for(i=0;i<len;i++){
        result=result+(int)((o[i]-'0')*pow(10,len-1-i));
    }
    return result;
}
void enzan(STACK s[],int *i,char d){
    int A,B;
    A=s[*i-1].o;
    B=s[*i].o;
    switch(d){
        case '+':
            s[*i-1].o=A+B;
            s[*i].o=0;    
            *i=*i-1;
            break;
        case '-':
            s[*i-1].o=A-B;
            s[*i].o=0;    
            *i=*i-1;
            break;
        case '*':
            s[*i-1].o=A*B;
            s[*i].o=0;    
            *i=*i-1;
            break;
        default:
            printf("error\n");
    }
    
    return;
}

int main(void){
    int i;
    int size;

    STACK *s;
    s=(STACK*)malloc(sizeof(STACK));
    size=1;
    i=0;
    
    char c[8];
    scanf("%s",c);
    s[0].o=getInt(c);
    
    while(1){
        strcpy(c,"\0");
        scanf("%s",c);
        if(c[0]=='\0')break;
        switch(c[0]){
            case '+':
            case '-':
            case '*':
                enzan(s,&i,c[0]);
                break;
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                i++;
                if(i>=size){
                    size++;
                    s=(STACK*)realloc(s,sizeof(STACK)*(size));
                }
                s[i].o=getInt(c);
                break;
            default:
                printf("error\n");
                return -1;
        }
    }
    
    printf("%d\n",s[0].o);
    
    free(s);
    
    return 0;
    
}

