| f | class ExceptionTree: | f | class ExceptionTree: | 
             |  |  |  | 
             |     def __init__(self): |  |     def __init__(self): | 
            | n |         self.exception_classes = {} | n |         self.nodes = {} | 
             |  |  |  | 
             |     def __call__(self, n): |  |     def __call__(self, n): | 
            | n |         if n in self.exception_classes: | n |         if n in self.nodes: | 
             |             return self.exception_classes[n] |  |             return self.nodes[n] | 
             |         if n == 1: |  |         elif n == 1: | 
             |             exc_class = type(f'Exception-{n}', (Exception,), {'n': n}) |  |             exc = type(f'E{n}', (Exception,), {'n': n}) | 
             |         else: |  |         else: | 
            | t |             parent_index = n // 2 | t |             parent = n // 2 | 
             |             parent_class = self(parent_index) |  |             parent_exc = self(parent) | 
             |             exc_class = type(f'Exception-{n}', (parent_class,), {'n': n} |  |             exc = type(f'E{n}', (parent_exc,), {'n': n}) | 
             | ) |  |   | 
             |         self.exception_classes[n] = exc_class |  |         self.nodes[n] = exc | 
             |         return exc_class |  |         return exc |