import
java.util.*;
public
class
GFG {
static
int
find(
int
x, List<Integer> parent)
{
if
(x == parent.get(x)) {
return
x;
}
parent.set(x, find(parent.get(x), parent));
return
parent.get(x);
}
static
HashSet<pair>
extraEdges(
int
n,
int
e, List<List<Integer> > edges)
{
HashSet<pair> ans =
new
HashSet<>();
List<Integer> parent =
new
ArrayList<>();
for
(
int
i =
0
; i < n; i++) {
parent.add(i);
}
for
(List<Integer> x : edges) {
int
vParent = find(x.get(
0
), parent);
int
uParent = find(x.get(
1
), parent);
if
(vParent == uParent) {
pair p =
new
pair(
0
,
0
);
if
(x.get(
0
) < x.get(
1
)) {
p =
new
pair(x.get(
0
), x.get(
1
));
}
else
{
p =
new
pair(x.get(
1
), x.get(
0
));
}
ans.add(p);
}
else
{
parent.set(vParent, uParent);
}
}
return
ans;
}
public
static
void
main(String[] args)
{
int
N =
3
, E =
3
;
List<List<Integer> > edges =
new
ArrayList<>();
edges.add(
new
ArrayList<Integer>() {
{
add(
0
);
add(
1
);
}
});
edges.add(
new
ArrayList<Integer>() {
{
add(
1
);
add(
2
);
}
});
edges.add(
new
ArrayList<Integer>() {
{
add(
2
);
add(
0
);
}
});
edges.add(
new
ArrayList<Integer>() {
{
add(
0
);
add(
2
);
}
});
HashSet<pair> ans = extraEdges(N, E, edges);
for
(pair edge : ans) {
System.out.println(edge.first +
" "
+ edge.second);
}
}
static
class
pair {
int
first, second;
pair(
int
f,
int
s)
{
first = f;
second = s;
}
public
int
hashCode()
{
return
Objects.hash(first + second);
}
public
boolean
equals(Object o)
{
if
(o ==
this
) {
return
true
;
}
if
(!(o
instanceof
pair)) {
return
false
;
}
pair c = (pair)o;
return
(Integer.compare(first, c.first) ==
0
)
&& (Integer.compare(second, c.second) ==
0
);
}
}
}