#include<bits/stdc++.h>
using namespace std;
int t,be[125],rd[125],jl[125];
string s1,s2;
void pt(){
queue<int>q;
for(int i='A';i<='Z';i++){
if(rd[i]==0){
q.push(i);
}
}
for(int i='a';i<='z';i++){
if(rd[i]==0){
q.push(i);
}
}
while(!q.empty()){
int u=q.front();
q.pop();
jl[u]=1;
int v=be[u];
if(!jl[v]){
q.push(v);
rd[v]=0;
}
}
}
void dfs(int u){
jl[u]=1;
int v=be[u];
if(!jl[v]){
dfs(v);
}
}
int main(){
cin>>t;
for(int i=1;i<=t;i++){
set<char>b;
cin>>s1>>s2;
bool f=1;
memset(be,0,sizeof(be));
memset(jl,0,sizeof(jl));
memset(rd,0,sizeof(rd));
for(int i=0;i<s1.size();i++){
b.insert(s1[i]);
if(be[s1[i]]==0||be[s1[i]]==s2[i]){
be[s1[i]]=s2[i];
}
else f=0;
}
if(f==0){
cout<<"-1\n";
continue;
}
if(b.size()==26){
if(s1==s2){
cout<<0<<"\n";
}
else cout<<"-1\n";
continue;
}
int ans=0;
memset(be,0,sizeof(be));
for(int i=0;i<s1.size();i++){
if(be[s1[i]]==0&&s1[i]!=s2[i]){
ans++;
rd[s2[i]]++;
be[s1[i]]=s2[i];
}
}
pt();
for(int i='A';i<='Z';i++){
if(jl[i]==0){
ans++;
dfs(i);
}
}
for(int i='a';i<='z';i++){
if(jl[i]==0){
ans++;
dfs(i);
}
}
cout<<ans<<"\n";
}
return 0;
}
AC 1~9
help