#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  for (ll i = 0; i < v.size(); ++i) os << v[i] << " ";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& v) {
  for (auto it : v) os << it << " ";
  return os;
}
template <typename T, typename S>
ostream& operator<<(ostream& os, const pair<T, S>& v) {
  os << v.first << " " << v.second;
  return os;
}
const ll mod = 1e9 + 7;
const ll inf = 2e18;
const ll ninf = -2e18;
ll takemod(ll a) { return ((a % mod) + mod) % mod; }
ll pow(ll a, ll b, ll m) {
  ll ans = 1;
  a %= m;
  while (b) {
    if (b & 1) ans = (ans * a) % m;
    b /= 2;
    a = (a * a) % m;
  }
  return ans;
}
ll modinv(ll a) { return takemod(pow(takemod(a), mod - 2, mod)); }
void solve() {
  ll n;
  cin >> n;
  string s1, s2;
  cin >> s1 >> s2;
  ll arr[26][26];
  memset(arr, 0, sizeof(arr));
  for (ll i = 0; i < n; i++) {
    ll a = s1[i] - 'a';
    ll b = s2[i] - 'a';
    if (a == b) continue;
    if (a > b) {
      cout << -1 << '\n';
      return;
    }
    arr[a][b]++;
  }
  ll ans = 0;
  for (ll i = 0; i <= 20; i++) {
    for (ll j = i + 1; j <= 20; j++) {
      if (!arr[i][j]) continue;
      for (ll k = j + 1; k <= 20; k++) {
        arr[j][k] += arr[i][k];
        arr[i][k] = 0;
      }
      ans++;
    }
  }
  cout << ans << '\n';
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  time_t t1, t2;
  t1 = clock();
  ll t;
  cin >> t;
  while (t--) solve();
  t2 = clock();
  cerr << '\n' << t2 - t1 << '\n';
  return 0;
}
