Pagini recente » Cod sursa (job #1514808) | Cod sursa (job #2283679) | Cod sursa (job #1539175) | Cod sursa (job #2883844) | Cod sursa (job #170818)
Cod sursa(job #170818)
#include <cstdio>
#include <cstring>
const int NMAX = 1000005;
int Pi[NMAX], n;
char Text[NMAX];
void prefix() {
int i, k;
Pi[1] = 0;
for (i = 2, k = 0; i <= n; ++ i) {
while (k > 0 && Text[i] != Text[k + 1])
k = Pi[k];
if (Text[i] == Text[k + 1])
++ k;
Pi[i] = k;
}
}
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int t;
int ans, i;
for (scanf("%d", &t); t > 0; -- t) {
scanf("%s", Text + 1);
n = strlen(Text + 1);
prefix();
ans = 0;
for (i = 2; i <= n; ++ i)
if (Pi[i] > 0 && i % (i - Pi[i]) == 0)
ans = i;
printf("%d\n", ans);
}
return 0;
}