Pagini recente » Cod sursa (job #993136) | Cod sursa (job #44356) | Cod sursa (job #1549784) | Cod sursa (job #552111) | Cod sursa (job #1596706)
#include <cstdio>
#include <cstring>
using namespace std;
const int NMAX = 1000006;
int T;
int N;
int P[NMAX];
char S[NMAX];
int solve() {
N = strlen(S + 1);
P[1] = 0;
for (int i = 2, k = 0; i <= N; i++) {
while (k && S[k + 1] != S[i]) {
k = P[k];
}
if (S[k + 1] == S[i])
k++;
P[i] = k;
}
for (int i = N; i >= 2; i--) {
if (!P[i]) continue;
if (P[i] % (i - P[i]) == 0)
return i;
}
return 0;
}
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d", &T);
while (T--) {
scanf("%s", S + 1);
printf("%d\n", solve());
}
return 0;
}