Pagini recente » Diferente pentru problema/towerx intre reviziile 1 si 2 | Borderou de evaluare (job #1520917) | Cod sursa (job #629474) | Borderou de evaluare (job #3192036) | Cod sursa (job #1005010)
#include<stdio.h>
#include<string.h>
char v[1000002];
int pi[1000002];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int t,i,n,aux=0;
scanf("%d\n",&t);
while(t--)
{
gets(v+1);
n=strlen(v+1);
memset(pi,0,sizeof(pi));
for(i=2;i<=n;++i)
{
while(v[aux+1]!=v[i]&&aux)
aux=pi[aux];
if(v[aux+1]==v[i])
++aux;
pi[i]=aux;
}
for(i=n;i>1;--i)
if(pi[i] && i%(i-pi[i])==0)
break;
printf("%d\n",i);
}
return 0;
}