Pagini recente » Cod sursa (job #2962823) | Cod sursa (job #1204245)
#include <cstdio>
#include <cstring>
using namespace std;
char s[1000003];
int pi[1000003];
int t;
int Prefix()
{
int n,i,k=0;
n=strlen(s+1);
pi[1]=0;
for(i=2; i<=n; i++)
{
while(k>0 && s[k+1]!=s[i])
k=pi[k];
if(s[k+1]==s[i])
k++;
pi[i]=k;
}
// for(i=1; i<=n; i++)
// printf("%d ",pi[i]);
for(i=n; i>=1; i--)
if(pi[i]>0 && i%(i-pi[i])==0)
return i ;
return 0;
//printf("\n");
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&t);
// printf("%d",t);
for(int i=1; i<=t; i++)
{
scanf("%s",(s+1));
printf("%d\n",Prefix() );
}
return 0;
}