input: Write a function to find the shortest path in a graph from a start node to an end node.
  assert network_search({'A': ['B', 'C'], 'B': ['D', 'E'], 'C': ['F'], 'D': [], 'E': ['F'], 'F': []}, 'A', 'F') == 2
  assert network_search({'A': ['B'], 'B': ['C'], 'C': ['D'], 'D': ['E'], 'E': []}, 'A', 'E') == 4
  assert network_search({'A': ['B', 'C'], 'B': ['D'], 'C': ['D'], 'D': ['E'], 'E': []}, 'A', 'E') == 3
output: def network_search(graph, start, end):
      from collections import deque
  
      queue = deque([(start, 0)])
      visited = set()
  
      while queue:
          node, depth = queue.popleft()
          if node == end:
              return depth
          if node not in visited:
              visited.add(node)
              for neighbor in graph[node]:
                  queue.append((neighbor, depth + 1))
  
      return -1