Pagini recente » Borderou de evaluare (job #2251330) | Cod sursa (job #35787) | Borderou de evaluare (job #1570348) | Borderou de evaluare (job #2012648) | Cod sursa (job #988062)
Cod sursa(job #988062)
#include <cstdio>
#include <cstring>
using namespace std;
const int NMAX = 1000003;
char S[NMAX];
int PI[NMAX], L;
int make_prefix () {
int i, k = 0;
for (i = 2; i <= L; ++i) {
while (k && S[k + 1] != S[i])
k = PI[k];
if (S[k + 1] == S[i])
++k;
PI[i] = k;
}
for (i = L; i != 1; --i)
if (PI[i] && !(i % (i - PI[i])))
return i;
return 0;
}
int main () {
freopen ("prefix.in", "r", stdin);
freopen ("prefix.out", "w", stdout);
int T;
for (scanf ("%d", &T); T--;) {
scanf ("%s", S + 1);
L = strlen (S + 1);
printf ("%d\n", make_prefix ());
}
}