# your code goes here
# your code goes here
from collections import deque

def find_reachability_bfs(graph, source):
    # 'visited' keeps track of reachable nodes
    visited = {node: False for node in graph}
    
    # Queue for BFS traversal
    queue = deque([source])
    visited[source] = True
    
    while queue:
        current = queue.popleft()
        
        # Traverse all neighbors of the current node
        for neighbor in graph[current]:
            if not visited[neighbor]:
                visited[neighbor] = True
                queue.append(neighbor)
                
    return visited

# Example Graph (Adjacency List)
graph = {
    'A': ['B', 'C'],
    'B': ['D'],
    'C': [],
    'D': [],
    'E': ['F'], # 'E' and 'F' are disconnected from 'A'
    'F': []
}

source_node = 'A'
reachability = find_reachability_bfs(graph, source_node)

# Output Results
print(f"Reachability from source node '{source_node}':")
for node, is_reachable in reachability.items():
    print(f"Node {node}: {'Reachable' if is_reachable else 'Not Reachable'}")