#include <bits/stdc++.h>
using namespace std;
//toast418
#define ffor(i,o,f) for(int i = o; i < f; i++)
#define pb push_back
#define mp make_pair
#define all(a) (a).begin(), (a).end()
#define F first
#define S second
#define PI 3.14159265358979323846264338327950
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
#define sz(x) ((int)(x).size())
typedef long long ll;
typedef pair < int, int > pii;
typedef vector < int > vi;
typedef vector < pii > vii;
typedef vector < vi > gi;
typedef vector < ll > vll;
typedef map < int, int > mii;
int t, n, m, u, v, groups;
const int tam = 1005;
vi parent;
vi componentSize;
int find(int nd){
if(parent[nd] == nd){
return nd;
}
return parent[nd] = find(parent[nd]);
}
void unite(int nd1, int nd2){
nd1 = find(nd1);
nd2 = find(nd2);
if(nd1 == nd2){
return;
}
if(componentSize[nd1] < componentSize[nd2]){
swap(nd1, nd2);
}
parent[nd2] = nd1;
componentSize[nd1] += componentSize[nd2];
}
void query(int nd1, int nd2){
if(find(nd1) == find(nd2)){
cout << "SI, la componente tiene "
<< componentSize[find(nd1)] << " nodos" << endl;
}
else{
cout << "NO" << endl;
}
}
int main()
{
parent.assign(tam, 0);
componentSize.assign(tam, 1);
ffor(i, 0, tam){
parent[i] = i;
}
unite(0, 3);
unite(0, 5);
unite(3, 6);
unite(1, 4);
unite(4, 8);
unite(2, 7);
query(5, 3);
query(1, 8);
query(6, 7);
query(9, 9);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovL3RvYXN0NDE4CiNkZWZpbmUgZmZvcihpLG8sZikJCSAgIGZvcihpbnQgaSA9IG87IGkgPCBmOyBpKyspCiNkZWZpbmUgcGIgCQkJCSAgIHB1c2hfYmFjawojZGVmaW5lIG1wICAgICAgICAgICAgICAgICBtYWtlX3BhaXIKI2RlZmluZSBhbGwoYSkgICAgICAgICAgICAgKGEpLmJlZ2luKCksIChhKS5lbmQoKQojZGVmaW5lIEYgICAgICAgICAgICAgICAgICBmaXJzdAojZGVmaW5lIFMgICAgICAgICAgICAgICAgICBzZWNvbmQKI2RlZmluZSBQSSAJCQkJICAgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MAojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKI2RlZmluZSBlbmRsIAkJCSAgICdcbicKI2RlZmluZSBzeih4KSAgICAgICAgICAgICAgKChpbnQpKHgpLnNpemUoKSkKdHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgbGw7CnR5cGVkZWYgcGFpciA8IGludCwgaW50ID4gIHBpaTsKdHlwZWRlZiB2ZWN0b3IgPCBpbnQgPiAgICAgdmk7CnR5cGVkZWYgdmVjdG9yIDwgcGlpID4gICAgIHZpaTsKdHlwZWRlZiB2ZWN0b3IgPCB2aSA+IAkgICBnaTsKdHlwZWRlZiB2ZWN0b3IgPCBsbCA+ICAgICAgdmxsOwp0eXBlZGVmIG1hcCA8IGludCwgaW50ID4gICBtaWk7CgppbnQgdCwgbiwgbSwgdSwgdiwgZ3JvdXBzOwpjb25zdCBpbnQgdGFtID0gMTAwNTsKdmkgcGFyZW50Owp2aSBjb21wb25lbnRTaXplOwoKaW50IGZpbmQoaW50IG5kKXsKICAgIGlmKHBhcmVudFtuZF0gPT0gbmQpewogICAgICAgIHJldHVybiBuZDsKICAgIH0KICAgIHJldHVybiBwYXJlbnRbbmRdID0gZmluZChwYXJlbnRbbmRdKTsKfQoKdm9pZCB1bml0ZShpbnQgbmQxLCBpbnQgbmQyKXsKICAgIG5kMSA9IGZpbmQobmQxKTsKICAgIG5kMiA9IGZpbmQobmQyKTsKICAgIGlmKG5kMSA9PSBuZDIpewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKGNvbXBvbmVudFNpemVbbmQxXSA8IGNvbXBvbmVudFNpemVbbmQyXSl7CiAgICAgICAgc3dhcChuZDEsIG5kMik7CiAgICB9CiAgICBwYXJlbnRbbmQyXSA9IG5kMTsKICAgIGNvbXBvbmVudFNpemVbbmQxXSArPSBjb21wb25lbnRTaXplW25kMl07Cn0KCnZvaWQgcXVlcnkoaW50IG5kMSwgaW50IG5kMil7CiAgICBpZihmaW5kKG5kMSkgPT0gZmluZChuZDIpKXsKICAgICAgICBjb3V0IDw8ICJTSSwgbGEgY29tcG9uZW50ZSB0aWVuZSAiCiAgICAgICAgICAgICA8PCBjb21wb25lbnRTaXplW2ZpbmQobmQxKV0gPDwgIiBub2RvcyIgPDwgZW5kbDsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgY291dCA8PCAiTk8iIDw8IGVuZGw7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgcGFyZW50LmFzc2lnbih0YW0sIDApOwogICAgY29tcG9uZW50U2l6ZS5hc3NpZ24odGFtLCAxKTsKICAgIGZmb3IoaSwgMCwgdGFtKXsKICAgICAgICBwYXJlbnRbaV0gPSBpOwogICAgfQoKICAgIHVuaXRlKDAsIDMpOwogICAgdW5pdGUoMCwgNSk7CiAgICB1bml0ZSgzLCA2KTsKCiAgICB1bml0ZSgxLCA0KTsKICAgIHVuaXRlKDQsIDgpOwoKICAgIHVuaXRlKDIsIDcpOwoKICAgIHF1ZXJ5KDUsIDMpOwogICAgcXVlcnkoMSwgOCk7CiAgICBxdWVyeSg2LCA3KTsKICAgIHF1ZXJ5KDksIDkpOwp9Cg==