Pagini recente » Cod sursa (job #1342554) | Cod sursa (job #822152) | Cod sursa (job #385451) | Cod sursa (job #1686003) | Cod sursa (job #922625)
Cod sursa(job #922625)
#include <cstdio>
#include <cstring>
using namespace std;
const int N=1000100;
char S[N];
int pi[N];
int dim;
void prefix()
{
int k=0;
pi[0]=0;
for(int i=2;S[i]!='\0';++i)
{
while(k&&S[k+1]!=S[i])
k=pi[k];
if(S[k+1]==S[i])
++k;
pi[i]=k;
}
}
void citire()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int n;
scanf("%d\n",&n);
for(;n>0;--n)
{
gets(S+1);
prefix();
dim=strlen(S+1);
bool ok=1;
for(int i=dim;i>=0;--i)
if(pi[i]&&i%(i-pi[i])==0){
printf("%d\n",i);
ok=0;
break;
}
if(ok)
printf("0\n");
}
fclose(stdin);
fclose(stdout);
}
int main()
{
citire();
return 0;
}