public class CalculatriceListe {
  boolean isListe ; // true si le haut est une liste
  double            hautDouble ; // vaut 0 si le haut est une liste
  CalculatriceListe hautListe ;  // vaut null si le haut est un double
  CalculatriceListe suite ;

  CalculatriceListe (double elt, CalculatriceListe old) {
    isListe = false ;
    hautDouble = elt ;
    hautListe  = null ;
    suite = old ;
  }

  CalculatriceListe (CalculatriceListe elt, CalculatriceListe old) {
    isListe = true ;
    hautDouble = 0. ;
    hautListe  = elt ;
    suite = old ;
  }

  private static void error (String msg) {
    System.err.println (msg) ;
    System.exit (2) ;
  }

  static CalculatriceListe pushDouble (CalculatriceListe pile, double elt) {
    // empile un réel
  }

  static CalculatriceListe pushListe (CalculatriceListe pile, CalculatriceListe elt) {
    // empile une liste
  }

  static double topDouble (CalculatriceListe pile) {
    // haut de pile si c'est un réel
  }

  static CalculatriceListe topListe (CalculatriceListe pile) {
    // haut de pile si c'est une liste
  }

  static CalculatriceListe pop (CalculatriceListe pile) {
    // dépile
  }

  static String listToString (CalculatriceListe pile) {
    // impression d'une liste
  }

  static String toString (CalculatriceListe pile) {
    // impression du contenu de la pile
  }

  static CalculatriceListe neg (CalculatriceListe pile) {
    // négation du dernier élément de la pile
  }

  static CalculatriceListe add (CalculatriceListe pile) {
    // addition des deux derniers éléments de la pile
  }

  static CalculatriceListe sub (CalculatriceListe pile) {
    // soustraction des deux derniers éléments de la pile
  }

  static CalculatriceListe mul (CalculatriceListe pile) {
    // multiplication des deux derniers éléments de la pile
  }

  static CalculatriceListe div (CalculatriceListe pile) {
    // division des deux derniers éléments de la pile
  }

  static CalculatriceListe concat (CalculatriceListe pile) {
    // concaténation des deux derniers éléments de la pile
  }

  static CalculatriceListe split (CalculatriceListe pile) {
    // éclatement d'une liste en haut de la pile
  }

  static CalculatriceListe join (CalculatriceListe pile, int n) {
    // réunion des n premiers éléments en une liste
  }

  public static String readline () throws java.io.IOException {
    // Cette méthode attend que l'utilisateur tape des données,
    // terminées par "enter" et en fait une chaîne de caractères.
    String ligne = "" ;
    for ( ; ; ) { // boucle infinie
      int r = System.in.read () ;
      if (r == -1)   return "q" ;   // fin de fichier
      char c = (char) r ;
      if (c == '\n') return ligne ; // fin de ligne
      ligne += c ;
    }
  }

  public static void main (String[] args) throws java.io.IOException {
    CalculatriceListe p = null ;
    for ( ; ; ) { // boucle infinie
      System.out.println ("Commandes : q NEG + - / * un_nombre { }n") ;
      String commande = readline () ;
      if (commande.equals("q")) System.exit (0) ;
      else if (commande.equals("NEG")) p = neg (p) ;
      else if (commande.equals("+")) {
        if (p.isListe) p = concat (p) ;
        else           p = add (p) ;
      }
      else if (commande.equals("-")) p = sub (p) ;
      else if (commande.equals("*")) p = mul (p) ;
      else if (commande.equals("/")) p = div (p) ;
      else if (commande.equals("{")) p = split (p) ;
      else if (commande.startsWith("}")) {
        commande = commande.substring(1) ;
        int n = Integer.parseInt (commande) ;
        p = join (p, n) ;
      }
      else {
        double x = Double.valueOf (commande) . doubleValue() ;
        p = pushDouble (p, x) ;
      }
      System.out.print (toString (p)) ;
    }
  }
}
