#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
class Wczytaj
{
public:
int **tab;
int p,d;
string pierwszy, drugi;
Wczytaj()
{
cin>>p;
getchar();
getline(cin,pierwszy);
cin>>d;
getchar();
getline(cin,drugi);
tab=new int *[p+1];
for(int i=0; i<p+1; i++) tab[i]=new int [d+1];
for(int i=0; i<p+1; i++)
{
tab[i][0]=0;
tab[0][i]=0;
}
}
int wiekszy(int **tab,int i, int j){
if(tab[i+1][j]>tab[i][j+1])
return tab[i+1][j];
else
return tab[i][j+1];
}
void matryca () //matryca [p+1][d+1] [i][j]
{
for(int j=0;j<d+1;j++){
for(int i=0;i<p+1;i++)
{
if(pierwszy[i]==drugi[j])
tab[i+1][j+1]=wiekszy(tab,i,j)+1;
else
tab[i+1][j+1]=wiekszy(tab,i,j);
cout<<tab[i][j]<<" ";
}
cout<<endl;
}
}
~Wczytaj()
{
for(int i=0; i<=p; i++)
delete []tab[i];
delete []tab;
}
};
int main()
{
int n;
cin>>n;
for(int k=0; k<n; k++)
{
Wczytaj w1;
w1.matryca();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKY2xhc3MgV2N6eXRhagp7CnB1YmxpYzoKICAgIGludCAqKnRhYjsKICAgIGludCBwLGQ7CiAgICBzdHJpbmcgcGllcndzenksIGRydWdpOwogICAgV2N6eXRhaigpCiAgICB7CiAgICAgICAgIGNpbj4+cDsKICAgICAgICBnZXRjaGFyKCk7CiAgICAgICAgZ2V0bGluZShjaW4scGllcndzenkpOwogICAgICAgIGNpbj4+ZDsKICAgICAgICBnZXRjaGFyKCk7CiAgICAgICAgZ2V0bGluZShjaW4sZHJ1Z2kpOwogICAgICAgIHRhYj1uZXcgaW50ICpbcCsxXTsKICAgICAgICBmb3IoaW50IGk9MDsgaTxwKzE7IGkrKykgdGFiW2ldPW5ldyBpbnQgW2QrMV07CiAgICAgICAgZm9yKGludCBpPTA7IGk8cCsxOyBpKyspCiAgICAgICAgewogICAgICAgICAgICB0YWJbaV1bMF09MDsKICAgICAgICAgICAgdGFiWzBdW2ldPTA7CiAgICAgICAgfQogICAgfQoKICAgIGludCB3aWVrc3p5KGludCAgKip0YWIsaW50IGksIGludCBqKXsKICAgIGlmKHRhYltpKzFdW2pdPnRhYltpXVtqKzFdKQogICAgICAgIHJldHVybiB0YWJbaSsxXVtqXTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gdGFiW2ldW2orMV07CiAgICB9CgogICAgdm9pZCBtYXRyeWNhICgpICAgICAgICAgLy9tYXRyeWNhIFtwKzFdW2QrMV0gW2ldW2pdCiAgICB7CiAgICAgICAgZm9yKGludCBqPTA7ajxkKzE7aisrKXsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxwKzE7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYocGllcndzenlbaV09PWRydWdpW2pdKQogICAgICAgICAgICAgICAgdGFiW2krMV1baisxXT13aWVrc3p5KHRhYixpLGopKzE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRhYltpKzFdW2orMV09d2lla3N6eSh0YWIsaSxqKTsKICAgICAgICAgICAgY291dDw8dGFiW2ldW2pdPDwiICI7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGVuZGw7CiAgICAgICAgfQogICAgfQoKICAgIH5XY3p5dGFqKCkKICAgIHsKICAgICAgICBmb3IoaW50IGk9MDsgaTw9cDsgaSsrKQogICAgICAgIGRlbGV0ZSBbXXRhYltpXTsKICAgICAgICBkZWxldGUgW110YWI7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIGludCBuOwogICAgY2luPj5uOwogICAgZm9yKGludCBrPTA7IGs8bjsgaysrKQogICAgewogICAgICAgIFdjenl0YWogdzE7CiAgICAgICAgdzEubWF0cnljYSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K