一种奇怪的方法,kmp,但和题解好像有很多出入
#include<bits/stdc++.h>
using namespace std;
int length=1;
int nxt[1000010];
string s;
void getnxt() {
nxt[0]=-1;
nxt[1]=0;
for(int i=2; i<=length; i++) {
int k=nxt[i-1];
while(k!=-1&&s[i-1]!=s[k])k=nxt[k];
nxt[i]=k+1;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int t;
cin>>t;
for(; t--;) {
long long ans=1;
cin>>s;
for(length=1; length<=s.length(); length++) {
long long this_ans=0;
getnxt();
int k=nxt[length];
while(k!=-1) {
if(k<=length/2&&k!=0) {
this_ans++;
}
k=nxt[k];
}
ans*=(this_ans+1);
ans%=(int)1e9+7;
}
cout<<ans<<'\n';
}
return 0;
}