#include <stdio.h>
#include <stdlib.h>

struct stack {
	int v;
	struct stack *next;
};

void init(struct stack **h)
{
	*h = malloc(sizeof(struct stack));
	(*h)->next = NULL;
}

void push(struct stack *h, int v)
{
	struct stack *t;
	
	t = malloc(sizeof(struct stack));
	t->v = v;
	t->next = h->next;
	h->next = t;
}

int pop(struct stack *h)
{
	int v;
	struct stack *t;
	
	t = h->next;
	h->next = t->next;
	v = t->v;
	free(t);
	
	return v;
}

int stack_empty(struct stack *h)
{
	return h->next == NULL;
}

int main(void)
{
	int op, n, c, op1, op2;
	struct stack *number, *operator;
	char s[200];
	
	init(&number);
	init(&operator);
	while((c = getchar()) != '\n'){
		if(c <= '9' && c >= '0')
		{
			n = c-'0';
			while((c = getchar()) && c <= '9' && c >= '0')
			{
				n = n*10+c-'0';
			}
			push(number, n);
		}
		if(c == '\n' || c == EOF) break;
		if(c == '+' || c == '-' || c == '*')
		{
			push(operator, (int) c);
		} else if(c == ')')
		{
			op = pop(operator);
			if(op == '+'){
				n = pop(number)+pop(number);
				push(number, n);
			} else if(op == '-'){
				op1 = pop(number);
				op2 = pop(number);
				n = op2-op1;
				push(number, n);
			} else if(op == '*'){
				n = pop(number)*pop(number);
				push(number, n);
			}
		}
	}
	printf("Evaluation: %d\n", pop(number));
	free(number);
	free(operator);
	
	return 0;
}
