code: def max_bipartite_matching(bigraph):
      
      n = len(bigraph)               # same domain for U and V
      match = [None] * n
      for u in range(n):
          augment(u, bigraph, [False] * n, match)
      return match
docs: Bipartie maximum matching
  
      :param bigraph: adjacency list, index = vertex in U,
                                      value = neighbor list in V
      :assumption: U = V = {0, 1, 2, ..., n - 1} for n = len(bigraph)
      :returns: matching list, match[v] == u iff (u, v) in matching
      :complexity: `O(|V|*|E|)`