Pagini recente » Cod sursa (job #3239572) | Cod sursa (job #2304103) | Cod sursa (job #2511660) | Cod sursa (job #3160338) | Cod sursa (job #1516923)
#include <cstdio>
#include <cstring>
using namespace std;
const int nmx = 1000000;
int n,pr[nmx];
char s[nmx];
int prefix(){
int i = 1, j = 0, l = strlen(s), nr = 0;
pr[0] = 0;
while(i < l){
if(s[i] != s[j]){
pr[i] = 0;
if(j)
j = pr[j-1];
else
++ i;
}
else{
pr[i] = j + 1;
++ j;
++ i;
}
}
for(int i = l - 1; i > 0; --i)
if(pr[i] && i+1 - pr[i] && ((i+1) % (i+1 - pr[i]) == 0))
return i+1;
return 0;
}
int main(){
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
scanf("%s", s);
printf("%d\n", prefix());
}
return 0;
}