Pagini recente » Cod sursa (job #2087285) | Cod sursa (job #1545025) | Cod sursa (job #1881271) | Cod sursa (job #1737914) | Cod sursa (job #1834868)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_L = 1000000;
char s[MAX_L + 5];
int p[MAX_L + 5];
void prefix (int n) {
int x = 0;
for (int i = 2; i <= n; ++i) {
while (x > 0 && s[x + 1] != s[i])
x = p[x];
if (s[x + 1] == s[i])
++x;
p[i] = x;
}
}
int main() {
freopen ("prefix.in", "r", stdin);
freopen ("prefix.out", "w", stdout);
int t;
scanf ("%d ", &t);
for (int i = 1; i <= t; ++i){
gets(s + 1);
int n = strlen(s + 1);
prefix (n);
bool found = false;
for (int j = n; j >= 1; --j) {
if (p[j] != j && p[j] != 0 && j % (j - p[j]) == 0){
printf ("%d\n", j);
gasit = true;
break;
}
}
if (gasit == false)
printf("0\n");
}
return 0;
}