Pagini recente » Cod sursa (job #2562341) | Cod sursa (job #841399) | Cod sursa (job #1167085) | Cod sursa (job #1658318) | Cod sursa (job #1457778)
#include <stdio.h>
#include <string.h>
using namespace std;
const int Dim = 1000001;
int T,P[Dim];
char S[Dim];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d ",&T);
while(T--)
{
gets(S + 1);
int N = strlen(S + 1),it = 0,Sol = 0;
for (int i = 2;i <= N;i++)
{
while(it && S[it + 1] != S[i])
it = P[it - 1];
if (S[it + 1] == S[i])
it++;
P[i] = it;
}
for (int i = N;i > 1;i--)
if (P[i] && (i % (i - P[i])) == 0)
{
Sol = i;
break;
}
printf("%d\n",Sol);
}
return 0;
}