def dls(graph, node, limit, visited):
    visited[node] = True
    print(node, end=" ")

    if limit == 0:
        return

    for i in range(len(graph)):
        if graph[node][i] == 1 and not visited[i]:
            dls(graph, i, limit - 1, visited)

def dfid(graph, start, max_depth):
    for depth in range(max_depth + 1):
        print("\nDepth =", depth)
        visited = [False] * len(graph)
        dls(graph, start, depth, visited)

graph = [
    [0,1,1,0],
    [1,0,1,1],
    [1,1,0,0],
    [0,1,0,0]
]

dfid(graph, 0, 3)