#include <bits/stdc++.h>
#define int long long
using namespace std;
const int LETTERS = 26;
int from[LETTERS];
int p[LETTERS];
vector<int> in[LETTERS];
bool vis[LETTERS];
int firstnumber;
int ans;
void dfs(int x) {
if (x == -1) return ;
if (vis[x]) {
if (x == firstnumber) ans++;
return ;
}
vis[x] = true;
dfs(from[x]);
}
signed main() {
int T;
// cin >> T;
T = 1;
while (T--) {
int n;
string s,t;
ans = 0;
bool f = false;
cin >> n >> s >> t;
memset(from,-1,sizeof from);
memset(p,false,sizeof p);
for (int i = 0; i < n; i++) {
if (from[s[i] - 'a'] != -1 && from[s[i] - 'a'] != t[i] - 'a') {
f = true;
break;
}
from[s[i] - 'a'] = t[i] - 'a';
p[t[i] - 'a'] = true;
}
if (f) {
cout << "-1\n";
continue;
}
int cnt = 0;
for (int i = 0; i < LETTERS; i++) cnt += p[i];
if (cnt == LETTERS && s != t) {
cout << "-1\n";
continue;
}
for (int i = 0; i < LETTERS; i++) in[i].clear();
for (int i = 0; i < LETTERS; i++) {
if (from[i] == i) from[i] = -1;
ans += from[i] != -1;
in[from[i]].push_back(i);
}
memset(vis,false,sizeof vis);
for (int i = 0; i < LETTERS; i++) {
if (in[i].size() >= 2 && !vis[i]) dfs(i);
}
for (int i = 0; i < LETTERS; i++) {
if (!vis[i]) {
firstnumber = i;
dfs(i);
}
}
cout << ans << endl;
}
return 0;
}