Cod sursa(job #456151)
#include<stdio.h>
#include<string.h>
#define MAX 1000002
char s[MAX];
long v[MAX],n;
long prefix()
{
long k,q,max=0;
v[1]=0;
k=0;
for(q=2;q<=n;q++)
{
while (k>0 && s[k+1]!=s[q]) k=v[k];
if (s[k+1]==s[q]) k++;
v[q]=k;
if (k && q%(q-k)==0) max=q;
}
return max;
}
int main()
{
FILE *f=fopen("prefix.in","rt");
FILE *g=fopen("prefix.out","wt");
long t,i;
fscanf(f,"%li\n",&t);
for(;t;--t)
{
fgets(s,MAX,f);
n=strlen(s)-1;
for(i=n;i>=1;i--) s[i]=s[i-1];
s[0]=' ';
fprintf(g,"%li\n",prefix());
}
fclose(f);
fclose(g);
return 0;
}