class Solution {
int[] parent;
int[] rank;
public void init(int n) {
parent = new int[n + 1];
rank = new int[n + 1];
for (int i = 1; i <= n; i++) {
parent[i] = i;
rank[i] = 1;
}
}
public int find(int x){
if( parent[x] == x){
return x;
}else{
return find(parent[x]);
}
}
public void union(int a,int b){
if( rank[a] >= rank[b]){
parent[b] = a;
rank[a] += rank[b];
return ;
}
parent[a] = b;
rank[b] += rank[a];
return;
}
public int[] findRedundantConnection(int[][] edges) {
int n = edges.length;
init(n);
for (int[] edge : edges) {
int a = edge[0];
int b = edge[1];
int u1 = find(a);
int u2 = find(b);
if( u1 == u2){
return edge;
}
union(u1,u2);
}
return null;
}
}