| f | class ExceptionTree: | f | class ExceptionTree: | 
             |  |  |  | 
             |     def __init__(self): |  |     def __init__(self): | 
             |         self.exceptions = {1: type('Exception-1', (Exception,), {'n': 1} |  |         self.exceptions = {1: type('Exception-1', (Exception,), {'n': 1} | 
             | )} |  | )} | 
             |  |  |  | 
            | t |     def __call__(self, n): | t |     def __call__(self, index): | 
             |         if n not in self.exceptions: |  |         if index not in self.exceptions: | 
             |             parent_n = n // 2 |  |             parent_index = index // 2 | 
             |             if parent_n not in self.exceptions: |  |             if parent_index not in self.exceptions: | 
             |                 self(parent_n) |  |                 self(parent_index) | 
             |             parent_class = self.exceptions[parent_n] |  |             parent_exception = self.exceptions[parent_index] | 
             |             self.exceptions[n] = type(f'Exception-{n}', (parent_class,), |  |             self.exceptions[index] = type(f'Exception-{index}', (parent_ | 
             |  {'n': n}) |  | exception,), {'n': index}) | 
             |         return self.exceptions[n] |  |         return self.exceptions[index] |