Pagini recente » Cod sursa (job #2976121) | Cod sursa (job #2463854) | Cod sursa (job #2522212) | Cod sursa (job #20967) | Cod sursa (job #1227381)
#include<cstdio>
using namespace std;
char A[1000001];
int i,pre,k[1000001],nr,l,t,test;
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d\n",&t);
for(test=1;test<=t;test++)
{
scanf("%s\n",&A);
int sol = 0;
int n=1;
//printf("%d ", k[0]);
for(i=1;A[i]!=0;i++)
{
n++;
pre=k[i-1];
while(A[pre]!=A[i]&&pre>0)
{
pre=k[pre-1];
}
if(A[i]!=A[pre])
k[i]=0;
else
k[i]=pre+1;
/*
if(2*k[i]==i+1)
{
l=(i+1)/2;
nr=2;
}
else if(l!=0&&k[i]!=0&&k[i]%l==0&&(2*k[i]-i-1)%l==0&&k[i]*2>=i)
{
nr++;
}*/
if ((i + 1) - k[i] <= k[i] && (i + 1) % ((i + 1) - k[i]) == 0) {
sol = i + 1;
}
//printf("%d ", k[i]);
}
//printf("%d\n",nr*l);
printf("%d\n", sol);
}
return 0;
}