import java.util.*;

/**
 * Exercice : rajouter l'opérateur - de soustraction (attention à l'ordre
 *  de dépilement... Cet opérateur n'est pas symétrique
 * Exercice : rajouter l'opérateur / de division entière...
 *  piège supplémentaire (la division par 0)
 * Exercice : modifier le code de façon à factoriser les opérations de
 *  dépilement des opérandes et empilement du résultat (tous les opérateurs
 *  d'arité 2 ont le même comportement...
 * Exercice : Rajouter des contrôles de sorte que si l'expression entrée est
 *  incorrecte, un message adéquat soit affiché...
 */
public class Arith {
  public static void main(String []args) {
    // On part d'une pile vide
    Stack<Integer> maPile = new Stack<Integer>();
    Scanner s = new Scanner(System.in);
    while (s.hasNext()) {
      String chaine = s.nextLine();
      try {
        // On essaie de décoder la ligne lue comme un entier, si
        // c'est possible cet entier est poussé en sommet de pile
        int valeur = Integer.parseInt(chaine);
        maPile.push(valeur);
      } catch(NumberFormatException e) {
        // Si la ligne ne représente pas un entier, on suppose que
        // c'est un opérateur...
        // Si c'est * on retire deux entiers en sommet de pile on
        // effectue la multiplication et on pousse le résultat sur la pile
        if (chaine.charAt(0)=='*') {
          int v1 = maPile.pop();
          int v2 = maPile.pop();
          int r = v1*v2;
          maPile.push(r);
        }	
        // Si c'est * on retire deux entiers en sommet de pile on
        // effectue la multiplication et on pousse le résultat sur la pile
        if (chaine.charAt(0)=='+') {
          int v1 = maPile.pop();
          int v2 = maPile.pop();
          int r = v1+v2;
          maPile.push(r);
        }	
      }
      // On affiche la pile après chaque lecture et calcul...
      System.out.println(maPile);
    }
    int resultatFinal = maPile.pop();
    System.out.println(resultatFinal);
  }
}