#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int next(string str1,int k)
{
int i=0;
int j=1;
int n=0;
while(j<k)
{
if(str1[i]==str1[j])
{
++n;
++i;
++j;
}
else
{
++j;
i=0;
n=0;
}
}
if(k==0){//这个强制定义的也一定要加上,一定不能落条件
return -1;
}else{
return n;
}
}
int main()
{
int fre;
string str1;
string str2;
scanf("%d",&fre);
for(int i=0; i<fre; ++i)
{
// getline(cin,str1);
// getline(cin,str2);
cin>>str1>>str2;
int m=str1.size();
int n=str2.size();
int j=0;
int k=0;
int p=0;
while(k<n)//这个用while,不用for
{
if(str1[j]==str2[k])//相等就一次往后加
{
++j;
++k;
}
else//不相等,让k跳到数组哪里,j先不动
{
j=next(str1,j);
// k=next[k];
if(j==-1)//如果在模式串第一个字母就不对,那么两个都往后+1,这个时候,k=0,正好+1,变成了1
{
++j;
++k;
}
}
if(j==m&&str1[j-1]==str2[k-1]) //你就要想好,匹配上的条件是什么!
{
++p;
// printf("%d\n",k-m);//这种最难确定了,一会再改
}
}
// for(int i=1;i<=n;++i){
// printf("%d ",next(b,i));
// }
// printf("\n");
//成功出来之后,k=n+1,并且a[j-1]==b[k-1]
// if(j==m&&str1[j-1]==str2[k-1]) //你就要想好,匹配上的条件是什么!
// {
// printf("%d\n",k-m);//这种最难确定了,一会再改
// }
// else
// {
// printf("%d\n",j);
// printf("%d\n",n);
printf("%d\n",p);
// }
}
}