Pagini recente » Cod sursa (job #2100361) | Cod sursa (job #1244319) | Cod sursa (job #320296) | Cod sursa (job #2370202) | Cod sursa (job #1417709)
#include <cstdio>
#include <cstring>
int N, len;
char str[1000100];
int table[1000100];
void prefix() {
int match = 0, maxim = 0;
table[1] = 0;
for (int i=2; i<=len; ++i) {
while (match > 0 && str[match+1] != str[i]) {
match = table[match];
if ((i - match) * 2 > len) {
i = len + 1;
continue;
}
}
if (str[match+1] == str[i]) {
match++;
if (i % (i-match) == 0)
maxim = i;
}
table[i] = match;
}
printf("%d\n", maxim);
}
int main () {
freopen("prefix.in", "rt", stdin);
freopen("prefix.out", "wt", stdout);
scanf("%d", &N);
for (;N;--N) {
scanf("%s", str+1);
len = strlen(str+1);
prefix();
}
return 0;
}