/*#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
char sz1[MAX_LEN];
char sz2[MAX_LEN];
int aMaxLen[MAX_LEN][MAX_LEN];
int main(void)
{
while( scanf("%s%s", sz1+1 ,sz2+1 ) > 0 )
{
int nLength1 = strlen( sz1+1);
int nLength2 = strlen( sz2+1);
int i, j;*/
/*for( i = 0;i <= nLength1; i ++ )
aMaxLen[i][0] = 0;
for( j = 0;j <= nLength2; j ++ )
aMaxLen[0][j] = 0;*/
/*memset( aMaxLen, 0,sizeof(aMaxLen) );
for( i = 1;i <= nLength1;i ++ )
{
for( j = 1; j <= nLength2; j ++ )
{
if( sz1[i] == sz2[j] )
aMaxLen[i][j] = aMaxLen[i-1][j-1] + 1;
else
{
int nLen1 = aMaxLen[i][j-1];
int nLen2 = aMaxLen[i-1][j];
if( nLen1 > nLen2 )
aMaxLen[i][j] = nLen1;
else
aMaxLen[i][j] = nLen2;
}
}
}
printf("%d\n", aMaxLen[nLength1][nLength2]);
}
return 0;
}
*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
int yongli,hang,lie,i,j;
int a[100][100];
cin>>yongli; // 用例个数
getchar(); //吸收回车
while(yongli--)
{
char x[100],y[100];
gets(x);
gets(y);
hang=strlen(x);
lie=strlen(y);
for(i=0;i<=hang;i++) a[i][0]=0; // 初始化第0列
for(i=0;i<=lie;i++) a[0][i]=0; // 初始化第0行
for(i=1;i<=hang;i++)
{
for(j=1;j<=lie;j++)
{
if(x[i-1]==y[j-1]) a[i][j]=a[i-1][j-1]+1; // 如果对应字符相等,就等于左上角加1
else //否则等于左边和上面中最大的数
{
if(a[i-1][j]>a[i][j-1]) a[i][j]=a[i-1][j];
else a[i][j]=a[i][j-1];
}
}
}
cout<<a[hang][lie]<<endl;
}
return 0;
}