Pagini recente » Cod sursa (job #2151041) | Cod sursa (job #1044879) | Cod sursa (job #1738585) | Razvy | Cod sursa (job #174098)
Cod sursa(job #174098)
#include <stdio.h>
#include <string.h>
#define nMax 1000005
#define maxim(a, b) ((a < b) ? a : b)
long T,i,N,sol=0;
long urm[nMax];
char A[nMax];
void urmatorul(){
int k=0,i;
urm[1]=0;
for (i=2;i<=N;i++){
while (k>0&&A[k+1]!=A[i])k=urm[k];
if (A[k+1]==A[i])k++;
urm[i]=k;
}
}
int main(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%ld\n",&T);
for (;T;T--){
scanf("%s",A+1);
N=strlen(A+1);
urmatorul();
sol=0;
for (i=N;i;--i)
if (urm[i]>0)
if (i%(i-urm[i])==0)
{sol=i;break;}
printf("%ld\n",sol);
}
return 0;
}