#!/usr/bin/python3

class Node:

    def __init__(self, op, left=None, right=None):
        self.op = op        # Buď číslo nebo jméno operátoru
        self.left = left
        self.right = right

    def __str__(self):
        if type(self.op) is int:
            return str(self.op)
        else:
            return '(' + str(self.left) + self.op + str(self.right) + ')'

    def print_tree(self, level=0):
        if self.right is not None:
            self.right.print_tree(level+1)
        print("  "*level, self.op)
        if self.left is not None:
            self.left.print_tree(level+1)

    def eval(self):
        op = self.op
        if type(op) is int:
            return self.op
        else:
            l = self.left.eval()
            r = self.right.eval()
            if op == '+':
                return l + r
            if op == '-':
                return l - r
            if op == '*':
                return l * r
            if op == '/':
                return l // r
            raise NotImplementedError()


x = Node('+', Node('*', Node(3), Node(4)), Node('-', Node(5), Node(6)))
print(x)
x.print_tree()
print(x.eval())