#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector")
using namespace std;
const int N = 2005, inf = 1e9 + 7;
int dp[N][N];
int cnt[2][26][N];
string second[2];
int n;
template <class T>
void umin(T &a, T b) {
  a = min(a, b);
}
int main() {
  cin.tie(0)->sync_with_stdio(0), cout.tie(0);
  cin >> n;
  while (cin >> n >> second[1] >> second[0]) {
    for (auto i = (0) - ((0) > (n)); i != n - ((0) > (n));
         i += 1 - 2 * ((0) > (n)))
      for (auto c = (0) - ((0) > (26)); c != 26 - ((0) > (26));
           c += 1 - 2 * ((0) > (26))) {
        cnt[0][c][i + 1] = cnt[0][c][i] + (second[0][i] - 'a' == c);
        cnt[1][c][i + 1] = cnt[1][c][i] + (second[1][i] - 'a' == c);
      }
    for (auto i = (0) - ((0) > (n + 1)); i != n + 1 - ((0) > (n + 1));
         i += 1 - 2 * ((0) > (n + 1)))
      for (auto j = (0) - ((0) > (n + 1)); j != n + 1 - ((0) > (n + 1));
           j += 1 - 2 * ((0) > (n + 1)))
        dp[i][j] = inf;
    dp[0][0] = 0;
    for (auto i = (0) - ((0) > (n + 1)); i != n + 1 - ((0) > (n + 1));
         i += 1 - 2 * ((0) > (n + 1)))
      for (auto j = (0) - ((0) > (i + 1)); j != i + 1 - ((0) > (i + 1));
           j += 1 - 2 * ((0) > (i + 1))) {
        if (i < n && j < n && second[0][i] == second[1][j])
          umin(dp[i + 1][j + 1], dp[i][j]);
        if (i < n) umin(dp[i + 1][j], dp[i][j] + 1);
        if (j < n) {
          int c = second[1][j] - 'a';
          if (cnt[0][c][i] >= cnt[1][c][j + 1]) umin(dp[i][j + 1], dp[i][j]);
        }
      }
    if (dp[n][n] >= inf) dp[n][n] = -1;
    cout << dp[n][n] << '\n';
  }
  return 0;
}
