using
System;
class
GFG {
static
int
Find(
int
node,
int
[] parent) {
if
(parent[node] < 0)
return
node;
return
parent[node] = Find(parent[node], parent);
}
static
void
UnionBySize(
int
par_u,
int
par_v,
int
[] parent) {
if
(parent[par_u] < parent[par_v]) {
parent[par_u] += parent[par_v];
parent[par_v] = par_u;
}
else
{
parent[par_v] += parent[par_u];
parent[par_u] = par_v;
}
}
static
int
[] FindRedundantConnection(
int
[][] edges,
int
[] parent) {
foreach
(
int
[] edge
in
edges) {
int
u = edge[0], v = edge[1];
int
par_u = Find(u, parent);
int
par_v = Find(v, parent);
if
(par_u == par_v)
return
new
int
[] { u, v };
UnionBySize(par_u, par_v, parent);
}
return
new
int
[] { -1, -1 };
}
public
static
void
Main(
string
[] args) {
int
N = 3;
int
[][] edges = {
new
int
[] { 1, 2 },
new
int
[] { 1, 3 },
new
int
[] { 2, 3 } };
int
[] parent =
new
int
[N + 1];
Array.Fill(parent, -1);
int
[] redundant = FindRedundantConnection(edges, parent);
if
(redundant[0] == -1) {
Console.WriteLine(
"Not found"
);
}
else
{
Console.WriteLine(redundant[0] +
" "
+ redundant[1]);
}
}
}