#include <iostream>
#include <vector>
using namespace std;
vector<int> adj[27];
bool used[27];
int current_size = 0;
void dfs(int node) {
used[node] = true;
current_size++;
for (int neighbor : adj[node]) {
if (!used[neighbor]) {
dfs(neighbor);
}
}
}
int main() {
// Example: assuming a and b are strings of the same length
string a = "hello";
string b = "world";
int n = a.length();
// Build the graph
for (int i = 0; i < n; i++) {
if (a[i] != b[i]) {
int u = a[i] - 'a' + 1;
int v = b[i] - 'a' + 1;
adj[u].push_back(v);
adj[v].push_back(u);
}
}
int ans = 0;
// Traverse the components
for (int i = 1; i <= 26; i++) {
// We only care about unvisited nodes that are actually part of an edge
if (!used[i] && !adj[i].empty()) {
current_size = 0;
dfs(i);
ans += (current_size - 1);
}
}
cout << ans << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+IGFkalsyN107CmJvb2wgdXNlZFsyN107CmludCBjdXJyZW50X3NpemUgPSAwOwoKdm9pZCBkZnMoaW50IG5vZGUpIHsKICAgIHVzZWRbbm9kZV0gPSB0cnVlOwogICAgY3VycmVudF9zaXplKys7CiAgICBmb3IgKGludCBuZWlnaGJvciA6IGFkaltub2RlXSkgewogICAgICAgIGlmICghdXNlZFtuZWlnaGJvcl0pIHsKICAgICAgICAgICAgZGZzKG5laWdoYm9yKTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8gRXhhbXBsZTogYXNzdW1pbmcgYSBhbmQgYiBhcmUgc3RyaW5ncyBvZiB0aGUgc2FtZSBsZW5ndGgKICAgIHN0cmluZyBhID0gImhlbGxvIjsKICAgIHN0cmluZyBiID0gIndvcmxkIjsKICAgIGludCBuID0gYS5sZW5ndGgoKTsKICAgIAogICAgLy8gQnVpbGQgdGhlIGdyYXBoCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHsKICAgICAgICAgICAgaW50IHUgPSBhW2ldIC0gJ2EnICsgMTsKICAgICAgICAgICAgaW50IHYgPSBiW2ldIC0gJ2EnICsgMTsKICAgICAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgICAgICB9CiAgICB9CgogICAgaW50IGFucyA9IDA7CiAgICAKICAgIC8vIFRyYXZlcnNlIHRoZSBjb21wb25lbnRzCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSAyNjsgaSsrKSB7CiAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHVudmlzaXRlZCBub2RlcyB0aGF0IGFyZSBhY3R1YWxseSBwYXJ0IG9mIGFuIGVkZ2UKICAgICAgICBpZiAoIXVzZWRbaV0gJiYgIWFkaltpXS5lbXB0eSgpKSB7IAogICAgICAgICAgICBjdXJyZW50X3NpemUgPSAwOwogICAgICAgICAgICBkZnMoaSk7CiAgICAgICAgICAgIGFucyArPSAoY3VycmVudF9zaXplIC0gMSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=