#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <algorithm>
#define maxn 10000
using namespace std;
void reverse(string &ans,int ct){
for(int i=0;i<ct/2;i++){
swap(ans[i],ans[ct-1-i]);
}
}
string mul(string a,string b){
int la=a.length(),lb=b.length();
string ans="";
int c[maxn],ct=0,d[maxn];//c plus d num
memset(d,0,sizeof d);
reverse(a,la),reverse(b,lb);
for(int i=0;i<lb;i++){
memset(c,0,sizeof c);
for(int j=0;j<la;j++){
d[i+j]+=(b[i]-'0')*(a[j]-'0')+c[i+j];
c[i+j+1]=d[i+j]/10;
d[i+j]%=10;
}
if(c[i+la]) d[i+la]=c[i+la],ct=i+1+la;
else ct=i+la;
}
int i=ct-1;
//脠楼脟掳碌艗0
while(i>=0&&d[i]==0) i--;
if(i<0) ans="0";
//
else for(;i>=0;i--) ans+=d[i]+'0';
return ans;
}
string add(string a,string b){
int la=a.length(),lb=b.length();
int c=0,ct;
int d[maxn];
string ans="";
if(la>lb) swap(a,b),swap(la,lb);
reverse(a,la),reverse(b,lb);
for(int i=0;i<la;i++){
d[i]=a[i]-'0'+b[i]-'0'+c;
c=d[i]/10;
d[i]%=10;
}
for(int i=la;i<lb;i++){
d[i]=b[i]-'0'+c;
c=d[i]/10;
d[i]%=10;
}
if(c) d[lb]=c,ct=lb+1;
else ct=lb;
int i=ct-1;
//脠楼脟掳碌艗0
while(i>=0&&d[i]==0) i--;
if(i<0) ans="0";
//
else for(;i>=0;i--) ans+=d[i]+'0';
return ans;
}
string itoa(int x){
string ans="";
int ct=0;
while(x){
ans+=x%10+'0';
x/=10,ct++;
}
reverse(ans,ct);
return ans;
}
int t;
char a[10010],b[110];
string dp[10010][110];
int main(){
//freopen("10069","r",stdin);
scanf("%d",&t);
for(int ca=1;ca<=t;ca++){
scanf("%s%s",a+1,b+1);
int la=strlen(a+1),lb=strlen(b+1);
for(int i=0;i<=la;i++){
for(int j=0;j<=lb;j++){
dp[i][j]="0";
}
}
for(int i=1;i<=la;i++){
if(a[i]==b[1]) dp[i][1]=add(dp[i][1],"1");
dp[i+1][1]=dp[i][1];
}
for(int i=2;i<=la;i++){
for(int j=2;j<=lb;j++){
if(a[i]==b[j]){
dp[i][j]=add(dp[i][j],dp[i-1][j-1]);
}
dp[i+1][j]=add(dp[i+1][j],dp[i][j]);
}
}
cout<<dp[la][lb]<<endl;
}
return 0;
}