#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[3000010];
char t[3000010];
int p[8000010];
char ts[8000010];
bool compare(char *s,char *t){
int len = strlen(s);
for(int i = 0;i < len;i ++){
if(s[i] != t[i]) return false;
}
return true;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%s",s);
scanf("%s",t);
int len = strlen(s);
if(!compare(s,t)){ //如果相等,从前后找不同的位置
int l = 0,r = len-1;
while(s[l] == t[l]) l++;
while(s[r] == t[r]) r--;
int c = 1;
for(int i = l;i < r;i ++){
if(s[i] != t[l+r-i]){
c = 0;
printf("0\n");
break;
}
}
if(c == 0) continue;
l--,r++;
while(l >= 0 && r < len && s[l] == s[r]){
c++;
l--,r++;
}
printf("%d\n",c);
}else{
ts[0] = '~';ts[1] = '#';
int add = 2;
for(int i = 0;i < len;i ++){
ts[add ++] = s[i];
ts[add ++] = '#';
}
ts[add] = '\0';
len = 2*len+200;
for(int i = 0;i < len;i ++) p[i] = 0; //初始化
int r = 0,c = 0; //r表示现在已经匹配到的最长回文串最右的位置,c表示最长回文串的中心
len = add;
long long sum = 0;
for(int i = 1;i < len;i ++){
p[i] = r>i?min(p[2*c-i],r-i):1;
while(ts[i+p[i]] == ts[i-p[i]]) p[i]++;
if(i+p[i] > r){
r = i+p[i];
c = i;
}
if(p[i] > 2) sum += (p[i]-1)/2;
}
sum += strlen(s);
printf("%lld\n",sum);
}
}
return 0;
}