def _dls(path: list, goal: str, depth: int):
    """
    Return the depth limited search path from a subpath to the goal.

    Args:
        path: the current path of Nodes being taken
        goal: the label of the goal node
        depth: the depth in the graph to search

    Returns: the path if it exists, none otherwise
    """
    current = path[-1]
    if current.label == goal:
        return path
    if depth <= 0:
        return None
    for edge in current.children:
        new_path = list(path)
        new_path.append(edge.destination)
        result = _dls(new_path, goal, depth - 1)
        if result is not None:
            return result