Pagini recente » Cod sursa (job #830374) | Cod sursa (job #1621538) | Cod sursa (job #427598) | Cod sursa (job #2469561) | Cod sursa (job #908101)
Cod sursa(job #908101)
#include <cstdio>
#include <cstring>
#define NMAX 1000001
using namespace std;
short T;
char S[NMAX];
int m,Lung[NMAX];
void prefix(){
int k=0;
Lung[1] = 0;
for(register int i = 2;i<=m;++i){
while(k>0 && S[k+1]!=S[i]) k = Lung[k];
if(S[k+1] == S[i]) k++;
Lung[i] = k;
}
}
int main(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&T);
int ok = 0;
for(register int i=1;i<=T;++i){
ok = 0;
memset(Lung,0,sizeof(Lung));
scanf("%s",S+1);
m = strlen(S+1);
prefix();
for(register int k=m;k>0 && !ok;--k)
if(Lung[k] && k%(k-Lung[k]) == 0)
printf("%d\n",k), ok = 1;
if(!ok)
printf("0\n");
}
return 0;
}