input: Write a python function to find the shortest path in an unweighted graph using breadth-first search.
  assert find_shortest_path({'A': ['B', 'C'], 'B': ['D', 'E'], 'C': ['F'], 'D': [], 'E': ['F'], 'F': []}, 'A', 'F') == ['A', 'C', 'F']
  assert find_shortest_path({'A': ['B', 'C'], 'B': ['D'], 'C': ['D'], 'D': ['E'], 'E': []}, 'A', 'E') == ['A', 'B', 'D', 'E']
  assert find_shortest_path({'A': ['B'], 'B': ['C'], 'C': ['A']}, 'A', 'C') == ['A', 'B', 'C']
output: def find_shortest_path(graph, start, end):
      from collections import deque
  
      # A queue to manage the BFS traversal
      queue = deque([(start, [start])])
      visited = set()
  
      while queue:
          node, path = queue.popleft()
          
          if node == end:
              return path
          
          if node not in visited:
              visited.add(node)
              for neighbor in graph.get(node, []):
                  queue.append((neighbor, path + [neighbor]))
  
      return None