Step 1: Start DFS at node 1, assign discovery time and low value = 1
Node 1: disc=1, low=1
Visited: {1}Why: We begin exploring from node 1 to cover the graph
Step 2: Move to node 2 from node 1, assign disc=2, low=2
Node 1: disc=1, low=1
Node 2: disc=2, low=2
Visited: {1,2}Why: Explore neighbors to find earliest reachable nodes
Step 3: Move to node 3 from node 2, assign disc=3, low=3
Node 1: disc=1, low=1
Node 2: disc=2, low=2
Node 3: disc=3, low=3
Visited: {1,2,3}Why: Continue DFS deeper to find bridges
Step 4: Node 3 has no unvisited neighbors, backtrack to node 2, update low[2] = min(low[2], low[3]) = 2
Node 2: disc=2, low=2
Node 3: disc=3, low=3
Why: Update low value to reflect earliest reachable ancestor
Step 5: Check if edge 2-3 is a bridge: low[3] > disc[2] (3 > 2) -> yes, record bridge (2,3)
Bridge found: (2,3)
Why: If low of child > disc of parent, edge is a bridge
Step 6: From node 2, move to node 5, assign disc=4, low=4
Node 5: disc=4, low=4
Visited: {1,2,3,5}Why: Explore next neighbor to find more bridges
Step 7: From node 5, move to node 4, assign disc=5, low=5
Node 4: disc=5, low=5
Visited: {1,2,3,4,5}Why: Continue DFS to leaf nodes
Step 8: Node 4 has no unvisited neighbors, backtrack to node 5, update low[5] = min(low[5], low[4]) = 4
Node 5: disc=4, low=4
Node 4: disc=5, low=5
Why: Update low value after backtracking
Step 9: Check if edge 5-4 is a bridge: low[4] > disc[5] (5 > 4) -> yes, record bridge (5,4)
Bridge found: (5,4)
Why: Edge 5-4 is a bridge by the same rule
Step 10: Backtrack to node 2, update low[2] = min(low[2], low[5]) = 2
Node 2: disc=2, low=2
Node 5: disc=4, low=4
Why: Update low value to earliest reachable ancestor
Step 11: Backtrack to node 1, update low[1] = min(low[1], low[2]) = 1
Node 1: disc=1, low=1
Node 2: disc=2, low=2
Why: Complete DFS and low updates
Result: Bridges found: (2,3), (5,4)