Step 1: Start DFS at node 1, assign discovery time 1 and low 1
Node 1: disc=1, low=1
Stack: [1]
Visited: {1}Why: We mark when we first visit node 1 to track earliest reachable nodes
Step 2: Move to node 2 from 1, assign disc=2, low=2
Node 2: disc=2, low=2
Stack: [1,2]
Visited: {1,2}Why: We continue DFS to explore neighbors and track discovery times
Step 3: Move to node 3 from 2, assign disc=3, low=3
Node 3: disc=3, low=3
Stack: [1,2,3]
Visited: {1,2,3}Why: We keep exploring deeper to find back edges and update lows
Step 4: Move to node 4 from 3, assign disc=4, low=4
Node 4: disc=4, low=4
Stack: [1,2,3,4]
Visited: {1,2,3,4}Why: We explore node 4 to check for back edges
Step 5: From 4, find back edge to 2, update low[4] = min(low[4], disc[2]) = 2
Node 4: disc=4, low=2
Stack: [1,2,3,4]
Visited: {1,2,3,4}Why: Back edge shows 4 can reach earlier node 2, so low[4] updates
Step 6: Backtrack to 3, update low[3] = min(low[3], low[4]) = 2
Node 3: disc=3, low=2
Stack: [1,2,3,4]
Visited: {1,2,3,4}Why: Low of 3 updates because 4 can reach node 2
Step 7: From 3, move to node 5, assign disc=5, low=5
Node 5: disc=5, low=5
Stack: [1,2,3,4,5]
Visited: {1,2,3,4,5}Why: Explore node 5 to check if it connects back
Step 8: Node 5 has no unvisited neighbors, backtrack to 3, check if low[5] > disc[3]
Node 5: disc=5, low=5
Node 3: disc=3, low=2
Stack: [1,2,3,4,5]
Why: Since low[5] > disc[3], edge 3-5 is a bridge
Result: Bridges found: 3 -> 5
Graph edges remain connected except removing 3-5 splits node 5