#include <bits/stdc++.h>
#define ll long long int
#define endl "\n"
#define pb push_back
#define lb lower_bound
#define yes cout<<"YES"<<"\n"
#define no cout<<"NO"<<"\n"
const ll N = 1e5+10;
const ll INF = 1e9+10;
using namespace std;
ll parent[N];
ll size[N];
void make(ll v) {
parent[v] = v;
size[v] = 1;
}
ll find(ll v) {
if(parent[v] == v) return v;
return parent[v] = find(parent[v]);
}
void Union(ll a, ll b) {
a = find(a);
b = find(b);
if(a != b) {
// Union by size
if(size[a] < size[b])
swap(a,b);
parent[b] = a;
size[a] += size[b];
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
// code
ll n, k; cin >> n >> k;
for(ll i = 1; i <= n; i++) {
make(i);
}
while(k--) {
ll u, v; cin >> u >> v;
Union(u, v);
}
// print the value of connected components
for(ll i = 1; i <= n; i++) {
if(find(i) == i) {
cout << "Component Root: "
<< i << ", size: " << size[i] << endl;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGxiIGxvd2VyX2JvdW5kCiNkZWZpbmUgeWVzIGNvdXQ8PCJZRVMiPDwiXG4iCiNkZWZpbmUgbm8gY291dDw8Ik5PIjw8IlxuIgpjb25zdCBsbCBOID0gMWU1KzEwOyAKY29uc3QgbGwgSU5GID0gMWU5KzEwOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbGwgcGFyZW50W05dOwpsbCBzaXplW05dOwoKdm9pZCBtYWtlKGxsIHYpIHsKICAgIHBhcmVudFt2XSA9IHY7CiAgICBzaXplW3ZdID0gMTsKfQoKbGwgZmluZChsbCB2KSB7CiAgICBpZihwYXJlbnRbdl0gPT0gdikgcmV0dXJuIHY7CiAgICByZXR1cm4gcGFyZW50W3ZdID0gZmluZChwYXJlbnRbdl0pOwp9Cgp2b2lkIFVuaW9uKGxsIGEsIGxsIGIpIHsKICAgIGEgPSBmaW5kKGEpOwogICAgYiA9IGZpbmQoYik7CiAgICBpZihhICE9IGIpIHsKICAgICAgICAvLyBVbmlvbiBieSBzaXplCiAgICAgICAgaWYoc2l6ZVthXSA8IHNpemVbYl0pCiAgICAgICAgICAgIHN3YXAoYSxiKTsKICAgICAgICBwYXJlbnRbYl0gPSBhOwogICAgICAgIHNpemVbYV0gKz0gc2l6ZVtiXTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICAvLyBjb2RlCiAgICBsbCBuLCBrOyBjaW4gPj4gbiA+PiBrOwogICAgZm9yKGxsIGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIG1ha2UoaSk7CiAgICB9CiAgICB3aGlsZShrLS0pIHsKICAgICAgICBsbCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIFVuaW9uKHUsIHYpOwogICAgfQogICAgLy8gcHJpbnQgdGhlIHZhbHVlIG9mIGNvbm5lY3RlZCBjb21wb25lbnRzCiAgICBmb3IobGwgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYoZmluZChpKSA9PSBpKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIkNvbXBvbmVudCBSb290OiAiCiAgICAgICAgICAgIDw8IGkgPDwgIiwgc2l6ZTogIiA8PCBzaXplW2ldIDw8IGVuZGw7CiAgICAgICAgfQogICAgfQp9