class Solution { /** IDEA: Before adding edge (u, v), check if there is already a path from u to v in the graph. If a path already exists → adding (u,v) creates a cycle → return that edge. Otherwise → add the edge and continue. */ public int[] findRedundantConnection(int[][] edges) { int n = edges.length; // Step-1 Create an adjacency list ArrayList> adj = new ArrayList<>(); for(int i=0; i<=n; i++) { adj.add(new ArrayList()); } // Step-2 Connect edges in adjacency list for(int[] edge : edges) { int u = edge[0]; int v = edge[1]; boolean[] visited = new boolean[n+1]; // Check if path already exists if(dfs(adj, visited, u, v)) { return edge; } // Otherwise add edge adj.get(u).add(v); adj.get(v).add(u); } return new int[0]; } public boolean dfs(ArrayList> adj, boolean[] visited, int node, int targetNode) { if(node == targetNode) return true; visited[node] = true; for(int v : adj.get(node)) { if(!visited[v]) { if(dfs(adj, visited, v, targetNode)) return true; } } return false; } }