题意自己看。。
kmp搞搞就好了。。
要分两次搞,不然会T。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,nxt[1000010],num[1000010],mod=1000000007;
char s[1000010];
long long ans;
int main()
{
scanf("%d",&n);
while(n--)
{
ans=1;
scanf("%s",s+1);
int len=strlen(s+1);
nxt[1]=0;
num[1]=1;
for(int i=2;i<=len;i++)
{
int j=nxt[i-1];
while(j&&s[j+1]!=s[i])
j=nxt[j];
if(s[j+1]==s[i])
j++;
nxt[i]=j;
num[i]=num[j]+1;
}
int j=0;
for(int i=2;i<=len;i++)
{
while(j&&s[j+1]!=s[i])
j=nxt[j];
if(s[j+1]==s[i])
j++;
while((j<<1)>i)
j=nxt[j];
ans=ans*(num[j]+1)%mod;
}
printf("%lld\n",ans);
}
}