code: def __dfs(self, v, index, layers):
          if index == 0:
              path = [v]
              while self._dfs_parent[v] != v:
                  path.append(self._dfs_parent[v])
                  v = self._dfs_parent[v]
              self._dfs_paths.append(path)
              return True
          for neighbour in self._graph[v]:
              if neighbour in layers[index - 1]:
                  if neighbour in self._dfs_parent:
                      continue
                  if (neighbour in self._left and (v not in self._matching or neighbour != self._matching[v])) or \
                          (neighbour in self._right and (v in self._matching and neighbour == self._matching[v])):
                      self._dfs_parent[neighbour] = v
                      if self.__dfs(neighbour, index-1, layers):
                          return True
          return False