import java.util.Scanner;

public class Main {
	static int[] s = new int[200]; // オペランド100個と演算子99個が収まる容量
	static int top = 0;
	static int max = 200;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		}
		System.out.println(pop());

	}

	/* 配列によるスタックの実装 */

	private static void initialize() {
		top = 0;
	}

	private static boolean isEmpty() {
		return top == 0;
	}

	private static boolean isFull() {
		return top >= max - 1;
	}

	private static void push(int x) {
		if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		}
	}

	private static int pop() {
		int ret = -1;
		if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		}
		return ret;
	}

} import java.util.Scanner; Scanner java.util public class Main {
	static int[] s = new int[200]; // オペランド100個と演算子99個が収まる容量
	static int top = 0;
	static int max = 200;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		}
		System.out.println(pop());

	}

	/* 配列によるスタックの実装 */

	private static void initialize() {
		top = 0;
	}

	private static boolean isEmpty() {
		return top == 0;
	}

	private static boolean isFull() {
		return top >= max - 1;
	}

	private static void push(int x) {
		if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		}
	}

	private static int pop() {
		int ret = -1;
		if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		}
		return ret;
	}

} Main static int[] s = new int[200]; // オペランド100個と演算子99個が収まる容量 s new int[200] 200 static int top = 0; top 0 static int max = 200; max 200 public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		}
		System.out.println(pop());

	} main {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		}
		System.out.println(pop());

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		} sc.hasNext() sc.hasNext sc {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		} if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			} sc.hasNextInt() sc.hasNextInt sc {
				int num = sc.nextInt();
				push(num);

			} int num = sc.nextInt(); num sc.nextInt() sc.nextInt sc push(num) push num {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			} String str = sc.next(); str sc.next() sc.next sc int a = pop(); a pop() pop int b = pop(); b pop() pop switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				} str case "+": "+" case "+": push(b + a) push b + a b a break; case "-": "-" case "-": push(b - a) push b - a b a break; case "*": "*" case "*": push(b * a) push b * a b a break; System.out.println(pop()) System.out.println System.out System System.out pop() pop String[] args args private static void initialize() {
		top = 0;
	} initialize {
		top = 0;
	} top = 0 top 0 private static boolean isEmpty() {
		return top == 0;
	} isEmpty {
		return top == 0;
	} return top == 0; top == 0 top 0 private static boolean isFull() {
		return top >= max - 1;
	} isFull {
		return top >= max - 1;
	} return top >= max - 1; top >= max - 1 top max - 1 max 1 private static void push(int x) {
		if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		}
	} push {
		if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		}
	} if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		} !isFull() isFull() isFull {
			top++;
			s[top] = x;
		} top++ top s[top] = x s[top] s top x {
			System.err.println("容量オーバーです。");
		} System.err.println("容量オーバーです。") System.err.println System.err System System.err "容量オーバーです。" int x x private static int pop() {
		int ret = -1;
		if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		}
		return ret;
	} pop {
		int ret = -1;
		if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		}
		return ret;
	} int ret = -1; ret -1 1 if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		} !isEmpty() isEmpty() isEmpty {
			ret = s[top];
			top--;
		} ret = s[top] ret s[top] s top top-- top {
			System.err.println("中身が空です。");
		} System.err.println("中身が空です。") System.err.println System.err System System.err "中身が空です。" return ret; ret public class Main {
	static int[] s = new int[200]; // オペランド100個と演算子99個が収まる容量
	static int top = 0;
	static int max = 200;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		}
		System.out.println(pop());

	}

	/* 配列によるスタックの実装 */

	private static void initialize() {
		top = 0;
	}

	private static boolean isEmpty() {
		return top == 0;
	}

	private static boolean isFull() {
		return top >= max - 1;
	}

	private static void push(int x) {
		if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		}
	}

	private static int pop() {
		int ret = -1;
		if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		}
		return ret;
	}

} public class Main {
	static int[] s = new int[200]; // オペランド100個と演算子99個が収まる容量
	static int top = 0;
	static int max = 200;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		}
		System.out.println(pop());

	}

	/* 配列によるスタックの実装 */

	private static void initialize() {
		top = 0;
	}

	private static boolean isEmpty() {
		return top == 0;
	}

	private static boolean isFull() {
		return top >= max - 1;
	}

	private static void push(int x) {
		if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		}
	}

	private static int pop() {
		int ret = -1;
		if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		}
		return ret;
	}

} Main
import java.util.Scanner;

public class Main {
	static int[] s = new int[200]; // オペランド100個と演算子99個が収まる容量
	static int top = 0;
	static int max = 200;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (sc.hasNext()) {
			if (sc.hasNextInt()) {
				int num = sc.nextInt();
				push(num);

			} else {
				String str = sc.next();
				int a = pop();
				int b = pop();

				switch (str) {
				case "+":
					push(b + a);
					break;

				case "-":
					push(b - a); // LIFO（後入れ先出し）

					break;
				case "*":
					push(b * a);
					break;
				}
			}
		}
		System.out.println(pop());

	}

	/* 配列によるスタックの実装 */

	private static void initialize() {
		top = 0;
	}

	private static boolean isEmpty() {
		return top == 0;
	}

	private static boolean isFull() {
		return top >= max - 1;
	}

	private static void push(int x) {
		if (!isFull()) {
			top++;
			s[top] = x;
		} else {
			System.err.println("容量オーバーです。");
		}
	}

	private static int pop() {
		int ret = -1;
		if (!isEmpty()) {
			ret = s[top];
			top--;
		} else {
			System.err.println("中身が空です。");
		}
		return ret;
	}

}
