import java.util.*;

/**
 * Lancement : java Calcul 1 2 + (par exemple)
 * ou : java Calcul 1 2 + 4 * 4 5 6 + + *
 */

public class Calcul {
  public static void main(String []args) {
    Stack<Integer> pile = new Stack<Integer>();
    System.out.println(pile);
    /*
     * On prend les arguments de la ligne de commande un par un
     */
    for (int i=0; i<args.length; i++) {
      String s = args[i]; // s est l'argument d'index i
      if (s.equals("+")) {    // S'il s'agit d'une addition
        if (pile.empty()) {   // que la pile n'est pas vide
          System.err.println("pas de valeurs");
          System.exit(1);
        }
        int e1 = pile.pop();  // on récupère une opérande
        
        if (pile.empty()) {   // si la pile n'est toujours pas vide
          System.err.println("pas assez de valeurs");
          System.exit(1);
        }
        int e2 = pile.pop();  // on récupère la seconde opérande
        int somme = e1+e2;    // on en effectue la somme
        pile.push(somme);     // le résultat de la somme est placé en sommet de pile
      } else if (s.equals("*")) { // idem pour la multiplication
        if (pile.empty()) { System.err.println("pas de valeurs"); System.exit(1); }
        int e1 = pile.pop();
        if (pile.empty()) { System.err.println("pas assez de valeurs"); System.exit(1); }
        int e2 = pile.pop();
        int produit = e1*e2;
        pile.push(produit);
      } else {              // l'argument n'est ni une addition ni une multiplication
        int v = Integer.valueOf(s); // on transforme la chaîne en une valeur entière
        pile.push(v);       // on place cette valeur dans la pile
      }
      System.out.println(pile);
    }
    // lorsqu'on a terminé
    int r = pile.pop(); // on récupère le sommet de pile
    if (pile.empty()) { // si il n'y a plus rien dans la pile c'est qu'on a le résultat
      System.out.println("Le résultat est "+r);
    } else {
      System.err.println("mauvaise expression");
    }
  }
}