code: def _augment(graph, capacity, flow, source, target):
      
      n = len(graph)
      A = [0] * n               # A[v] = min residual cap. on path source->v
      augm_path = [None] * n    # None = node was not visited yet
      Q = deque()               # BFS
      Q.append(source)
      augm_path[source] = source
      A[source] = float('inf')
      while Q:
          u = Q.popleft()
          for v in graph[u]:
              cuv = capacity[u][v]
              residual = cuv - flow[u][v]
              if residual > 0 and augm_path[v] is None:
                  augm_path[v] = u    # store predecessor
                  A[v] = min(A[u], residual)
                  if v == target:
                      break
                  else:
                      Q.append(v)
      return (augm_path, A[target])
docs: find a shortest augmenting path