#include <bits/stdc++.h>
using namespace std;
vector<int> adj_list[100];
int visited[100];
void DFS(int currnode) {
visited[currnode] = 1;
for (int i = 0; i < adj_list[currnode].size(); i++) {
int child = adj_list[currnode][i];
if (visited[child] == 0) {
DFS(child);
}
}
}
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) {
DFS(i);
components++;
}
}
cout << "Total connected components: " << components << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBhZGpfbGlzdFsxMDBdOwppbnQgdmlzaXRlZFsxMDBdOwoKdm9pZCBERlMoaW50IGN1cnJub2RlKSB7CiAgICB2aXNpdGVkW2N1cnJub2RlXSA9IDE7CiAgICAKCiAgIAoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFkal9saXN0W2N1cnJub2RlXS5zaXplKCk7IGkrKykgewogICAgICAgICAgICBpbnQgY2hpbGQgPSBhZGpfbGlzdFtjdXJybm9kZV1baV07CiAgICAgICAgICAgIGlmICh2aXNpdGVkW2NoaWxkXSA9PSAwKSB7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBERlMoY2hpbGQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCmludCBtYWluKCkgewogICAgaW50IG5vZGUsIGVkZ2U7CiAgICBjaW4gPj4gbm9kZSA+PiBlZGdlOwoKICAgIC8vIEZpeDogTG9vcCBzaG91bGQgcnVuIGZvciBlZGdlIHRpbWVzLCBub3QgZWRnZSsxCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVkZ2U7IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqX2xpc3RbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkal9saXN0W3ZdLnB1c2hfYmFjayh1KTsgLy8gdW5kaXJlY3RlZAogICAgfQoKICAgIGludCBjb21wb25lbnRzID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG5vZGU7IGkrKykgewogICAgICAgIGlmICh2aXNpdGVkW2ldID09IDApIHsKICAgICAgICAgICAgREZTKGkpOwogICAgICAgICAgICBjb21wb25lbnRzKys7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgIlRvdGFsIGNvbm5lY3RlZCBjb21wb25lbnRzOiAiIDw8IGNvbXBvbmVudHMgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=