Step 1: Start DFS at node 1, set discovery time and low value to 1
disc[1]=1, low[1]=1, stack empty
Why: Initialize discovery and low values for the first node
Step 2: Visit node 2 from node 1, set disc[2]=2, low[2]=2
disc[1]=1, low[1]=1; disc[2]=2, low[2]=2
Why: Explore neighbor node 2 and record discovery time
Step 3: Visit node 4 from node 2, set disc[4]=3, low[4]=3
disc[1]=1, low[1]=1; disc[2]=2, low[2]=2; disc[4]=3, low[4]=3
Why: Explore neighbor node 4 and record discovery time
Step 4: Node 4 has no unvisited neighbors, backtrack to node 2, update low[2] = min(low[2], low[4]) = 2
disc[1]=1, low[1]=1; disc[2]=2, low[2]=2; disc[4]=3, low[4]=3
Why: Update low value of node 2 based on subtree rooted at 4
Step 5: Check if edge 2-4 is a bridge: low[4] > disc[2] (3 > 2) true, so edge 2-4 is a bridge
Bridge found: 2-4
Why: If low value of child is greater than discovery time of parent, edge is a bridge
Step 6: Backtrack to node 1, update low[1] = min(low[1], low[2]) = 1
disc[1]=1, low[1]=1; disc[2]=2, low[2]=2
Why: Update low value of node 1 based on subtree rooted at 2
Step 7: Visit node 3 from node 1, set disc[3]=4, low[3]=4
disc[1]=1, low[1]=1; disc[3]=4, low[3]=4
Why: Explore neighbor node 3 and record discovery time
Step 8: Node 3 has no unvisited neighbors, backtrack to node 1, update low[1] = min(low[1], low[3]) = 1
disc[1]=1, low[1]=1; disc[3]=4, low[3]=4
Why: Update low value of node 1 based on subtree rooted at 3
Step 9: Check if edge 1-3 is a bridge: low[3] > disc[1] (4 > 1) true, so edge 1-3 is a bridge
Bridge found: 1-3
Why: Edge 1-3 is a bridge because low[3] > disc[1]
Result: Bridges found: 2-4 and 1-3