Pagini recente » Cod sursa (job #2046203) | Cod sursa (job #2597948) | Cod sursa (job #2251641) | Cod sursa (job #1777031) | Cod sursa (job #1553168)
# include <bits/stdc++.h>
using namespace std;
const int Nmax = 1000000 + 5;
char a[Nmax];
int phi[Nmax], N, n;
void make_phi()
{
int k = 0;
N = strlen(a+1);
memset(phi, 0, sizeof(phi));
phi[1] = 0;
for (int i = 2; i <= N; ++i)
{
k = phi[i - 1];
while (k && a[i] != a[k + 1]) k = phi[i];
if (a[i] == a[k + 1]) phi[i] = k + 1;
else phi[i] = 0;
}
}
void sol ()
{
make_phi();
for (int i = N; i >= 2; --i)
{
if (phi[i] > 0 && i % (i - phi[i]) == 0)
{
printf("%d\n", i);
return;
}
}
printf("0\n");
}
int main ()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d\n", &n);
for (int i = 1; i <= n; ++i)
{
gets(a + 1);
sol();
}
return 0;
}