import
java.io.*;
import
java.util.*;
class
MyPair
{
private
final
int
key;
private
final
int
value;
public
MyPair(
int
aKey,
int
aValue)
{
key = aKey;
value = aValue;
}
public
int
key() {
return
key; }
public
int
value() {
return
value; }
}
class
GFG
{
static
int
[] par =
new
int
[
100005
];
static
int
[] s =
new
int
[
100005
];
static
int
root(
int
i)
{
if
(par[i] == i)
return
i;
else
return
par[i] = root(par[i]);
}
static
void
merge(
int
a,
int
b)
{
int
p = root(a);
int
q = root(b);
if
(p == q)
return
;
if
(s[p] > s[q]){
int
temp = p;
p = q;
q = temp;
}
par[p] = q;
s[q] += s[p];
}
static
void
maxSize(ArrayList<MyPair> e,
int
n)
{
for
(
int
i =
1
; i < n +
1
; i++) {
par[i] = i;
s[i] =
1
;
}
ArrayList<Integer> answer =
new
ArrayList<Integer>();
ArrayList<Integer> compSizes =
new
ArrayList<Integer> ();
for
(
int
i =
1
; i <= n; i++)
compSizes.add(s[i]);
for
(
int
i =
0
; i < e.size(); i++){
MyPair edge = e.get(i);
if
(root(edge.key()) != root(edge.value())) {
int
size1 = s[root(edge.key())];
int
size2 = s[root(edge.value())];
compSizes.remove(compSizes.indexOf(size1));
compSizes.remove(compSizes.indexOf(size2));
merge(edge.key(), edge.value());
compSizes.add(size1 + size2);
Collections.sort(compSizes);
}
answer.add(compSizes.get(compSizes.size() -
1
));
}
for
(
int
i =
0
; i < answer.size(); i++) {
System.out.print(answer.get(i) +
" "
);
}
}
public
static
void
main(String[] args)
{
int
N =
4
;
ArrayList<MyPair> E =
new
ArrayList<MyPair>();
E.add(
new
MyPair(
1
,
2
));
E.add(
new
MyPair(
3
,
4
));
E.add(
new
MyPair(
2
,
3
));
maxSize(E, N);
}
}