Pagini recente » Cod sursa (job #1312562) | Cod sursa (job #1335386) | Cod sursa (job #2605544) | Cod sursa (job #523718) | Cod sursa (job #1552080)
#include <cstdio>
#include <cstring>
const int len = 1e6;
char s[len + 5];
int pi[len + 5];
bool viz[len + 5];
int main() {
#ifdef INFOARENA
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
#endif
int T;
for(scanf("%d\n", &T); T; -- T) {
gets(s + 1);
int x = 0, n = strlen(s + 1);
pi[1] = 0;
for(int i = 2; i <= n; ++ i) {
while(x > 0 and s[i] != s[x + 1])
x = pi[x];
if(s[i] == s[x + 1])
++ x;
pi[i] = x;
}
int ans = 0;
for(int i = 1; i <= n; ++ i) {
if( (i - pi[i] == pi[i]) || ( i - pi[i] == pi[i] - pi[pi[i]] and viz[pi[i]] ) ) {
viz[i] = true;
ans = i;
} else
viz[i] = false;
}
printf("%d\n", ans);
}
return 0;
}