RT记得@
#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
int vis=1,ans=0;
char x=getchar();
while(x<'0'||x>'9'){
if(x=='-')vis=-1;
x=getchar();
}
while(x>='0'&&x<='9'){
ans=ans*10+x-'0';
x=getchar();
}
return vis*ans;
}
inline void print(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10+'0');
}
const int N=1e5+9,M=57;
int T=read();
string a,b;
vector<int>e[M];
int vis[M];
bool fi[M][M];
int ans[M];
int cnt=0;
int f;
bool visf;
int num=0;
int tint(char ch){
return (ch<='Z'?ch-'A'+1:ch-'a'+27);
}
inline bool dfs(int s){
// print(s),kg;
if(vis[s])return 1;
vis[s]=1;
for(int i=0;i<e[s].size();i++){
if(dfs(e[s][i])){
return 1;
}
}
return 0;
}
signed main(){
while(T--){
cin>>a>>b;
int n=a.size();
memset(fi,0,sizeof(fi));
memset(ans,0,sizeof(ans));
a=' '+a,b=' '+b,num=0;
for(int i=1;i<=52;i++)e[i].clear();
for(int i=1;i<=n;i++){
int x=tint(a[i]),y=tint(b[i]);
if(fi[x][y])continue;
ans[x]++;
fi[x][y]=1;
if(x==y)continue;
e[x].push_back(y),num++;
}
visf=0;
for(int i=1;i<=52;i++){
if(ans[i]>1){
print(-1),endl;
visf=1;
break;
}
}
if(visf)continue;
f=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=52;i++)if(!vis[i]&&e[i].size())f+=dfs(i);
cnt=0;
for(int i=1;i<=52;i++)if(e[i].size()>=1)cnt++;
if(f&&cnt==52){
print(-1),endl;
continue;
}
if(!f)print(num),endl;
else{
print(num+1),endl;
}
}
return 0;
}