Pagini recente » Cod sursa (job #793655) | Cod sursa (job #2473520) | Cod sursa (job #2063604) | Cod sursa (job #191659) | Cod sursa (job #1007253)
#include <cassert>
#include <cstdio>
#include <cstring>
const int nmax=1000002;
int p[nmax];
char c[nmax];
int main()
{
int t=0,i=0,sol=0,k=0;
assert(freopen("prefix.in","r",stdin));
assert(freopen("prefix.out","w",stdout));
assert(scanf("%d\n",&t));
for (t=t; t>0; --t)
{
gets(c+1);
i=2;
sol=0;
k=0;
while (c[i])
{
while (k>0 && c[i]!=c[k+1])
k=p[k];
if (c[i]==c[k+1])
++k;
p[i]=k;
++i;
}
for (i=strlen(c+1); i>1; --i)
if (p[i]>0 && i-p[i]!=0 && i%(i-p[i])==0)
{
sol=i;
i=0;
}
assert(printf("%d\n",sol));
}
return 0;
}