Pagini recente » Cod sursa (job #2497775) | Cod sursa (job #2570460) | Cod sursa (job #988013) | Cod sursa (job #947254) | Cod sursa (job #564228)
Cod sursa(job #564228)
#include <cstdio>
#include <cstring>
using namespace std;
FILE *fin=freopen("prefix.in","r",stdin);
FILE *fout=freopen("prefix.out","w",stdout);
int t;
char s[1000005];
int ap[1000005];
void kmp()
{
int l=strlen(s+1);
int v=0;
ap[1]=0;
for(int i=2;i<=l;i++)
{
while(v>0 && s[v+1]!=s[i])
v=ap[v];
if(s[v+1] == s[i])
v++;
ap[i]=v;
}
}
void afisare()
{
int q=0;
int l=strlen(s+1);
for(int i=2;i<=l;i++)
{
if(i%(i-ap[i])==0 && ap[i]>0)
q=i;
}
printf("%d\n",q);
}
int main()
{
scanf("%d\n", &t);
for(int i=0;i<t;i++)
{
gets(s+1);
kmp();
afisare();
}
return 0;
}