#include<bits/stdc++.h>
using namespace std;
const long long N = 1100000 , mod = 1e9+7;
int n;
long long pi[N],num[N],numQ[N];
char A[N];
long long sum;
long long jump[N][30];
int main(){
scanf("%d",&n);
while(n--){
sum = 1;
memset(jump, 0 ,sizeof(jump));
memset(pi, 0 ,sizeof(pi));
memset(num, 0 ,sizeof(num));
memset(numQ, 0 ,sizeof(numQ));
scanf("%s",A);
pi[0]=0;
int len = strlen(A);
for(int i=0; i < len-1 ; i++){
int k;
bool flag = false;
for(k=pi[i] ; k>=0 ;k=pi[k-1]){
if(A[k] == A[i+1]){
flag = true;
break;
}
if( k==0 ) break;
}
if(flag) pi[i+1] = k+1;
else pi[i+1] = 0;
if(pi[i+1]==0) num[i+1] = 0;
else num[i+1] = num[pi[i+1]-1] + 1;
}
for(int k=1;k<=19;k++){
jump[0][k] = 0;
}
for(int i = 1;i <= len ; i++){
jump[i][0] = pi[i]-1;
}
for(int k=1;k<=19;k++){
for(int i = 1 ; i <= len; i++){
jump[i][k] = jump[ jump[i][k-1] ][k-1];
}
}
for(int i = 0; i<len ;i++){
if(pi[i] == 0){
numQ[i] = 0;
continue;
}
if(pi[i] == 1){
numQ[i] = 1;
continue;
}
int mid = (i+1)/2;
int t = pi[i]-1;
if(t+1<=mid){
numQ[i] = num[i] ;
continue;
}
for(int k = 19; k >= 0; k--)
if(jump[t][k]+1 > mid) t = jump[t][k];
t = jump[t][0];
numQ[i] = num[t] + 1;
}
for(int i = 0; i<len ;i++){
sum = sum*((numQ[i]+1)%mod)%mod;
}
printf("%lld\n",sum);
}
return 0;
}