func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma )   #pragma GCC optimize( unroll-loops )   using namespace std;   const long long N = 2005, inf = 1e15;   long long dp[N][N], suffix1[N][26], suffix2[N][26];   long long n;   string s, t;   long long dpsolve(long long i, long long j) {     if (j == 0) {       return 0;     }     if (dp[i][j] != -1) return dp[i][j];     long long ans = inf;     if (i > 0) {       ans = min(ans, 1 + dpsolve(i - 1, j));       if (s[i] == t[j]) ans = min(ans, dpsolve(i - 1, j - 1));     }     if (suffix1[i + 1][t[j] -  a ] >= suffix2[j][t[j] -  a ])       ans = min(ans, dpsolve(i, j - 1));     dp[i][j] = ans;     return ans;   }   void solve() {     cin >> n;     cin >> s;     cin >> t;     s =     + s;     t =     + t;     for (long long i = n; i >= 1; i--) {       for (long long j = 0; j < 26; j++) {         suffix1[n + 1][j] = suffix2[n + 1][j] = 0;         suffix1[i][j] = (s[i] -  a  == j) + suffix1[i + 1][j];         suffix2[i][j] = (t[i] -  a  == j) + suffix2[i + 1][j];       }     }     for (long long i = 0; i <= n; i++)       for (long long j = 0; j <= n; j++) dp[i][j] = -1;     bool flag = true;     for (long long j = 0; j < 26; j++)       if (suffix1[1][j] != suffix2[1][j]) flag = false;     if (!flag)       cout <<  -1 n ;     else {       long long ans = dpsolve(n, n);       cout << ans <<   n ;     }   }   signed main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long t = 1;     cin >> t;     while (t--) solve();     return 0;   }   