Pagini recente » Cod sursa (job #2545850) | Cod sursa (job #1494657) | Cod sursa (job #763662) | Cod sursa (job #59793) | Cod sursa (job #786108)
Cod sursa(job #786108)
#include <cassert>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1000005;
int t, n;
int pi[N];
char text[N];
void prefix(char* text) {
int p = 0;
memset(pi, 0, sizeof(pi));
for (int i = 2; i <= n; ++i) {
while (p > 0 && text[p + 1] != text[i])
p = pi[p];
if (text[p + 1] == text[i])
++p;
pi[i] = p;
}
}
int main() {
assert(freopen("prefix.in", "r", stdin) != NULL);
assert(freopen("prefix.out", "w", stdout) != NULL);
assert(scanf("%d", &t) == 1);
while (t--) {
memset(text, 0, sizeof(text));
assert(scanf("%s", text + 1) == 1);
n = strlen(text + 1);
prefix(text);
while (n) {
if (pi[n] && n % (n - pi[n]) == 0) {
printf("%d\n", n);
break;
}
--n;
}
if (n == 0)
printf("0\n");
}
}