/*
状态转移方程:
re[i][j]=max(re[i-1][j],re[i][j-1],re[i-1][j-1]+(a[i]==b[j]))
re[i][j]:长度为i的a串和长度为j的b串的公共最长子序列长度
*/
#define maxn 1006
int re[maxn][maxn];
int Max(int a,int b,int c)
{
if(a<b)
a=b;
if(a<c)
a=c;
return a;
}
int main()
{
int t,i,j;
char a[maxn],b[maxn];
scanf("%d",&t);
while(t--)
{
scanf("%s %s",a+1,b+1);
memset(re,0,sizeof(re));
int lena=strlen(a),lenb=strlen(b);
for(i=1;i<lena;++i)
for(j=1;j<lenb;++j)
{
re[i][j]=Max(re[i-1][j],re[i][j-1],re[i-1][j-1]+(a[i]==b[j]));
}
printf("%d\n",re[lena-1][lenb-1]);
}
return 0;
}