#include <bits/stdc++.h>
using namespace std;
int Arr[100], size[100];
int root (int i)
{
while(Arr[ i ] != i)
{
Arr[ i ] = Arr[ Arr[ i ] ] ;
i = Arr[ i ];
}
return i;
}
void weighted_union(int A,int B)
{
int root_A = root(A);
int root_B = root(B);
if(size[root_A] < size[root_B ])
{
Arr[ root_A ] = Arr[root_B];
size[root_B] += size[root_A];
}
else
{
Arr[ root_B ] = Arr[root_A];
size[root_A] += size[root_B];
}
}
void initialize( int N)
{
for(int i = 0;i<N;i++)
{
Arr[ i ] = i ;
size[ i ] = 1;
}
}
int main() {
// your code goes here
initialize(6);
weighted_union(1,2);
weighted_union(2,4);
weighted_union(3,5);
map<int, vector<int> >m;
for (int i=1;i<=5;i++) {
if(m.find(Arr[i])!=m.end()){
vector<int> x = m[Arr[i]];
x.push_back(i);
m[Arr[i]] = x;
} else {
vector<int> x;
x.push_back(i);
m[Arr[i]]=x;
}
}
for (std::map<int,vector<int> >::iterator it=m.begin(); it!=m.end(); ++it) {
vector<int> x = it->second;
for(int j=0;j<x.size();++j) {
cout<<x[j]<<" ";
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgQXJyWzEwMF0sIHNpemVbMTAwXTsKCmludCByb290IChpbnQgaSkKewogICAgd2hpbGUoQXJyWyBpIF0gIT0gaSkKICAgIHsKICAgICAgICBBcnJbIGkgXSA9IEFyclsgQXJyWyBpIF0gXSA7IAoJCWkgPSBBcnJbIGkgXTsgCgl9CglyZXR1cm4gaTsKfQoKdm9pZCB3ZWlnaHRlZF91bmlvbihpbnQgQSxpbnQgQikKewogICAgaW50IHJvb3RfQSA9IHJvb3QoQSk7CiAgICBpbnQgcm9vdF9CID0gcm9vdChCKTsKICAgIGlmKHNpemVbcm9vdF9BXSA8IHNpemVbcm9vdF9CIF0pCiAgICB7CgkJQXJyWyByb290X0EgXSA9IEFycltyb290X0JdOwoJCXNpemVbcm9vdF9CXSArPSBzaXplW3Jvb3RfQV07Cgl9CiAgICBlbHNlCiAgICB7CgkJQXJyWyByb290X0IgXSA9IEFycltyb290X0FdOwoJCXNpemVbcm9vdF9BXSArPSBzaXplW3Jvb3RfQl07Cgl9Cn0KCnZvaWQgaW5pdGlhbGl6ZSggaW50IE4pCnsKICAgIGZvcihpbnQgaSA9IDA7aTxOO2krKykKICAgIHsKCQlBcnJbIGkgXSA9IGkgOwoJCXNpemVbIGkgXSA9IDE7Cgl9Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJaW5pdGlhbGl6ZSg2KTsKCXdlaWdodGVkX3VuaW9uKDEsMik7Cgl3ZWlnaHRlZF91bmlvbigyLDQpOwoJd2VpZ2h0ZWRfdW5pb24oMyw1KTsKCQoKCW1hcDxpbnQsIHZlY3RvcjxpbnQ+ID5tOwoJZm9yIChpbnQgaT0xO2k8PTU7aSsrKSB7CgkJaWYobS5maW5kKEFycltpXSkhPW0uZW5kKCkpewoJCQl2ZWN0b3I8aW50PiB4ID0gbVtBcnJbaV1dOwoJCQl4LnB1c2hfYmFjayhpKTsKCQkJbVtBcnJbaV1dID0geDsKCQl9IGVsc2UgewoJCQl2ZWN0b3I8aW50PiB4OwoJCQl4LnB1c2hfYmFjayhpKTsKCQkJbVtBcnJbaV1dPXg7CgkJfQoJfQoJCglmb3IgKHN0ZDo6bWFwPGludCx2ZWN0b3I8aW50PiA+OjppdGVyYXRvciBpdD1tLmJlZ2luKCk7IGl0IT1tLmVuZCgpOyArK2l0KSB7CgkJdmVjdG9yPGludD4geCA9IGl0LT5zZWNvbmQ7CgkJZm9yKGludCBqPTA7ajx4LnNpemUoKTsrK2opIHsKCQkJY291dDw8eFtqXTw8IiAiOwoJCX0KCQljb3V0PDxlbmRsOwoJfQoJCglyZXR1cm4gMDsKfQ==