func_code_string: #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++) {           if (arr[i][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;   }   