Pagini recente » Borderou de evaluare (job #1488400) | Borderou de evaluare (job #325093) | Cod sursa (job #2501952) | Borderou de evaluare (job #1882978) | Cod sursa (job #1967983)
#include <bits/stdc++.h>
#define maxN 1000002
FILE *fin = freopen("prefix.in", "r", stdin);
FILE *fout = freopen("prefix.out", "w", stdout);
using namespace std;
int T, N, pi[maxN];
char s[maxN];
void FailureFunction(){
pi[0] = -1;
int k = -1;
for(int i = 1; i <= N; ++ i){
while(k >= 0 && s[k + 1] != s[i])
k = pi[k];
pi[i] = ++ k;
}
for(int i = 1; i <= N; ++ i)
s[i] = 0;
}
int main()
{
scanf("%d\n", &T);
while(T--){
gets(s + 1);
N = strlen(s + 1);
FailureFunction();
int i;
for(i = N; i; -- i)
if(pi[i] > 0 && pi[i] % (i - pi[i]) == 0)
break;
printf("%d\n", i);
}
return 0;
}