#dfs

def DFS_with_adj_list(graph, root):
    visited = []
    stack = [root]

    while stack:
        n = stack.pop()
        if n not in visited:
            visited.append(n)
            stack += graph[n] - set(visited)
    return visited
graph_list = {1: set([3, 4]),
              2: set([3, 4, 5]),
              3: set([1, 5]),
              4: set([1]),
              5: set([2, 6]),
              6: set([3, 5])}
root_node = 1
print(DFS_with_adj_list(graph_list, root_node))
# BFS
from collections import deque

def BFS_with_adj_list(graph, root):
    visited = []
    queue = deque([root])
    print(queue)
    while queue:
        
        n = queue.popleft()
        print(n)
        print(visited)
        if n not in visited:
            visited.append(n)
            queue += graph[n] - set(visited)
            # print(queue)
    return visited

graph_list = {1: set([3, 4]),
              2: set([3, 4, 5]),
              3: set([1, 5]),
              4: set([1]),
              5: set([2, 6]),
              6: set([3, 5])}
root_node = 1
print(BFS_with_adj_list(graph_list, root_node))