docs: def mrca_matrix(self):
          '''Return a dictionary storing all pairwise MRCAs. ``M[u][v]`` = MRCA of nodes ``u`` and ``v``. Excludes ``M[u][u]`` because MRCA of node and itself is itself
  
          Returns:
              ``dict``: ``M[u][v]`` = MRCA of nodes ``u`` and ``v``
          '''
          M = dict()
          leaves_below = dict()
          for node in self.traverse_postorder():
              leaves_below[node] = list()
              if node.is_leaf():
                  leaves_below[node].append(node); M[node] = dict()
              else:
                  for i in range(len(node.children)-1):
                      for l1 in leaves_below[node.children[i]]:
                          leaves_below[node].append(l1)
                          for j in range(i+1, len(node.children)):
                              for l2 in leaves_below[node.children[j]]:
                                  M[l1][l2] = node; M[l2][l1] = node
                  if len(node.children) != 1:
                      for l2 in leaves_below[node.children[-1]]:
                          leaves_below[node].append(l2)
          return M