Pagini recente » Cod sursa (job #2619741) | Cod sursa (job #145406) | Cod sursa (job #2497998) | Cod sursa (job #1670026) | Cod sursa (job #2059719)
#include <cstdio>
#include <cstring>
#define max 1000001
using namespace std;
int n,k,mx,nr;
char s[max];
int pr[max];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",s+1);
k=mx=0;
memset(pr,0,max);
pr[1]=0;
nr=strlen(s+1);
for(int i=2;i<=nr;i++)
{
while(k>0 && s[k+1]!=s[i])
k=pr[k];
if(s[k+1]==s[i])
k++;
pr[i]=k;
}
int j;
for(j=nr;j>1;j--)
if(pr[j] && j%(j-pr[j])==0)
{
printf("%d\n",j);
break;
}
if(j==1)
printf("0\n");
}
return 0;
}