Pagini recente » Cod sursa (job #990212) | Cod sursa (job #2970010) | Cod sursa (job #1198622) | Cod sursa (job #2980297) | Cod sursa (job #1936921)
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
int pref[1000005];
char s[1000005];
void prep(int n){
int i,j;
j = 0;
for(i = 2;i <= n;i++){
while(j != 0 && s[j + 1] != s[i]){
j = pref[j];
}
if(s[j + 1] == s[i]){
j++;
}
pref[i] = j;
}
}
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int T;
scanf("%d", &T);
while(T--){
scanf("%s", s + 1);
int n = strlen(s + 1);
prep(n);
int i;
int ans = 0;
for(i = n;i >= 1;i--){
if(pref[i] != 0 && i/3 <= pref[i] && pref[i] <= i/2 && (2 * pref[i] == i || pref[i]%(i - 2*pref[i]) == 0)){
ans = i;
break;
}else if(pref[i] != 0 && i%(i - pref[i]) == 0){
ans = i;
break;
}
}
printf("%d\n", ans);
}
return 0;
}