class ExceptionPile extends Exception {
  String nom;

  public ExceptionPile (String x) {
      nom = x;
  }
}

class Pile {

  final static int maxP = 10;

  int          hauteur ;
  Element      contenu[];

  Pile ()  {
     hauteur = 0;
     contenu = new Element[maxP];
  }

  static void faireVide (Pile p) {
    p.hauteur = 0;
  }

  static boolean estVide(Pile p) {
    return p.hauteur == 0;
  }

  static boolean estPleine(Pile p) {
    return p.hauteur == maxP;
  }

  static void ajouter (Element x, Pile p) 
      throws ExceptionPile
  {
    p.contenu[p.hauteur] = x;
    if (estPleine (p))
         throw new ExceptionPile("pleine");
    ++ p.hauteur;
  }

  static Element  valeur(Pile p) 
      throws ExceptionPile
  {
    if (estVide (p)) 
        throw new ExceptionPile("vide");
    return p.contenu [p.hauteur - 1];
   }

  static void supprimer(Pile p) 
      throws ExceptionPile
  {
    if (estVide (p)) 
        throw new ExceptionPile("vide");
    -- p.hauteur;
  }
}

class Element {
  //\esc{Evaluation des expressions pre'fixe'es voir page \pageref{prog:evaluation-prefixe}:}
  boolean       estSymbole; 
  int           valeur;
  char          valsymb;

  Element (boolean b, int v, char c) {
    estSymbole = b;
    valeur = v;
    valsymb = c;
  }

  public String toString () {
    return (estSymbole + ", " + valeur + ", " +  valsymb);
  }
}

public class ExpressionPrefixe {
  static int calculer (char a, int x, int y) {

    switch (a) {
        case '+': return x + y;
        case '*': return x * y;
    }
    return -1;
  }

  static void inserer (Element x, Pile p) 
      throws ExceptionPile
  {
    Element    y, z;

    if (Pile.estVide(p)  || x.estSymbole ||
                            Pile.valeur(p).estSymbole)
        Pile.ajouter(x,p);
    else {
        y = Pile.valeur(p);
        Pile.supprimer(p);
        z = Pile.valeur(p);
        Pile.supprimer(p);
        x.valeur = calculer (z.valsymb, x.valeur, y.valeur);
        inserer(x,p);
    }
  }

  static void insererIter (Element x, Pile p) 
      throws ExceptionPile
  {
    Element    y, z;

    while (!(Pile.estVide(p)  || x.estSymbole ||
                            Pile.valeur(p).estSymbole))  {
        y = Pile.valeur(p);
        Pile.supprimer(p);
        z = Pile.valeur(p);
        Pile.supprimer(p);
        x.valeur = calculer (z.valsymb, x.valeur, y.valeur);
    }
    Pile.ajouter(x,p);
  }

  static int evaluer (Element u[])
      throws ExceptionPile
  {
    Pile p = new Pile();

    for (int i = 0; i < u.length ; ++i) {
        insererIter (u[i], p);
    }
    return Pile.valeur(p).valeur;
  }

  public static void main (String args[]) {

    Element exp[] = new Element [args.length];

    for (int i = 0; i < args.length; ++i) {
       String s = args[i];
       if (s.equals ("+") || s.equals ("*"))
           exp[i] = new Element (true, 0, s.charAt(0));
       else
           exp[i] = new Element (false, Integer.parseInt(s), ' ');
    }    
    try {
        System.out.println (evaluer (exp));
    } catch (ExceptionPile x) {
        System.err.println ("Pile " + x.nom);
    }
  }
}
