import java.util.ArrayDeque;
import java.util.Deque;

public class Prefixe {

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("Veuillez fournir une expression en notation polonaise inversée.");
            return;
        }

        Deque<Node> stack = new ArrayDeque<>();

        try {
            for (String token : args) {
                switch (token) {
                    case "+":
                    case "-":
                    case "x":
                    case "/":
                        // Opérateur : créer un nœud opérateur
                        Node right = stack.pop();
                        Node left = stack.pop();
                        stack.push(new OperatorNode(token, left, right));
                        break;
                    default:
                        // Opérande : créer un nœud valeur
                        stack.push(new ValueNode(Integer.parseInt(token)));
                        break;
                }
            }

            // L'AST final doit être le seul élément restant sur la pile
            if (stack.size() == 1) {
                Node root = stack.pop();
                System.out.println("= " + root.toPrefix());
            } else {
                System.out.println("Erreur : Expression incorrecte.");
            }

        } catch (Exception e) {
            System.out.println("Erreur lors de l'évaluation de l'expression : " + e.getMessage());
        }
    }
}
