#include <iostream>
#include <string>
using namespace std;
int max(int l1, int l2)
{
int bigger;
if (l1 > l2) bigger = l1;
else bigger = l2;
return bigger;
}
int main()
{
int *** L;
int test_number;
int *p1, *p2;
string *string1p, *string2p;
cin >> test_number;
p1 = new int[test_number];
p2 = new int[test_number];
string1p = new string[test_number];
string2p = new string[test_number];
L = new int**[test_number];
for (int i = 0; i < test_number; i++)
{
cin >> p1[i];
cin >> string1p[i];
cin >> p2[i];
cin >> string2p[i];
L[i] = new int*[p1[i] + 1];
}
for (int i = 0; i < test_number; i++)
for (int j = 0; j <=p1[i]; j++)
{
L[i][j] = new int[p2[i] + 1];
}
for (int i = 0; i < test_number; i++)
{
for (int j = 0; j <= p1[i]; j++) L[i][j][0] = 0;
for (int k = 0; k < p2[i]; k++)L[i][0][k] = 0;
}
for (int i = 0; i < test_number; i++)
{
for (int j = 0; j < p1[i]; j++)
for (int k = 0; k < p2[i]; k++)
{
if (string1p[i][j] == string2p[i][k])
L[i][j + 1][k + 1] = 1 + L[i][j][k];
else
L[i][j + 1][k + 1] = max(L[i][j + 1][k], L[i][j][k + 1]);
}
cout << L[i][p1[i]][p2[i]] << endl;
}
for (int i = 0; i < test_number; i++)
for (int j = 0; j <= p1[i]; j++)
delete[] L[i][j];
for (int i = 0; i < test_number; i++)
delete [] L[i];
delete[] L;
delete[] p1;
delete[] p2;
delete[]string1p;
delete[]string2p;
return 0;
}