#include <bits/stdc++.h>
using namespace std;
vector<int> adj_list[100];
int visited[100];
void BFS(int start) {
visited[start] = 1;
queue<int> q;
q.push(start);
while (!q.empty()) {
int currnode = q.front();
q.pop();
for (int i = 0; i < adj_list[currnode].size(); i++) {
int child = adj_list[currnode][i];
if (visited[child] == 0) {
q.push(child);
visited[child] = 1;
}
}
}
}
int main() {
int node, edge;
cin >> node >> edge;
// Fix: Loop should run for edge times, not edge+1
for (int i = 0; i < edge; i++) {
int u, v;
cin >> u >> v;
adj_list[u].push_back(v);
adj_list[v].push_back(u); // undirected
}
int components = 0;
for (int i = 1; i <= node; i++) {
if (visited[i] == 0) {
BFS(i);
components++;
}
}
cout << "Total connected components: " << components << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBhZGpfbGlzdFsxMDBdOwppbnQgdmlzaXRlZFsxMDBdOwoKdm9pZCBCRlMoaW50IHN0YXJ0KSB7CiAgICB2aXNpdGVkW3N0YXJ0XSA9IDE7CiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBxLnB1c2goc3RhcnQpOwoKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IGN1cnJub2RlID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWRqX2xpc3RbY3Vycm5vZGVdLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgIGludCBjaGlsZCA9IGFkal9saXN0W2N1cnJub2RlXVtpXTsKICAgICAgICAgICAgaWYgKHZpc2l0ZWRbY2hpbGRdID09IDApIHsKICAgICAgICAgICAgICAgIHEucHVzaChjaGlsZCk7CiAgICAgICAgICAgICAgICB2aXNpdGVkW2NoaWxkXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW50IG5vZGUsIGVkZ2U7CiAgICBjaW4gPj4gbm9kZSA+PiBlZGdlOwoKICAgIC8vIEZpeDogTG9vcCBzaG91bGQgcnVuIGZvciBlZGdlIHRpbWVzLCBub3QgZWRnZSsxCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVkZ2U7IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqX2xpc3RbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkal9saXN0W3ZdLnB1c2hfYmFjayh1KTsgLy8gdW5kaXJlY3RlZAogICAgfQoKICAgIGludCBjb21wb25lbnRzID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG5vZGU7IGkrKykgewogICAgICAgIGlmICh2aXNpdGVkW2ldID09IDApIHsKICAgICAgICAgICAgQkZTKGkpOwogICAgICAgICAgICBjb21wb25lbnRzKys7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgIlRvdGFsIGNvbm5lY3RlZCBjb21wb25lbnRzOiAiIDw8IGNvbXBvbmVudHMgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=