1 solutions

  • 0
    @ 2025-11-5 17:29:49

    C++ :

    #define MAXN 1000010UL
    
    #define ll long long
    
    #include <cstdio>
    #include <cstring>
    
    int n,next[MAXN],len,num[MAXN];
    
    ll Ans;
    const ll Mod=(1e9)+7;
    
    char inp[MAXN];
    
    void GetNext(){
    	len=strlen(inp);num[0]=1,num[1]=2;
    	for(int i=1,k=0;i<len;i++){
    		while(k&&inp[i]!=inp[k]){
    			k=next[k];
    		}
    		if(inp[i]==inp[k]){
    			k++;
    		}
    		next[i+1]=k;num[i+1]=num[k]+1;
    	}
    	return;
    }
    
    void Work(){
    	scanf("%s",inp);
    	Ans=1;
    	GetNext();
    	for(int i=1,k=0;i<=len;i++){
    		int pos=(i+1)>>1;
    		while(k&&inp[k]!=inp[i]){
    			k=next[k];
    		}
    		if(inp[k]==inp[i]){
    			k++;
    		}
    		while(k>pos){
      			k=next[k];
    		}
    		Ans*=num[k];Ans%=Mod;
    	}
    	printf("%lld\n",Ans);
    	return;
    }
    
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		Work();
    	}
    	return 0;
    }
    
    • 1

    Information

    ID
    18485
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By