Pagini recente » Cod sursa (job #2241546) | Cod sursa (job #40974) | Cod sursa (job #2066929) | Cod sursa (job #136651) | Cod sursa (job #1150844)
#include <cstdio>
#include <cstring>
using namespace std;
#define FILEIN "prefix.in"
#define FILEOUT "prefix.out"
#define LENMAX 1000003
int T, Len;
char S[LENMAX];
int P[LENMAX];
void prefix() {
P[0] = P[1] = 0;
for ( int i = 2, k = 0; i <= Len; i++ ) {
while ( k > 0 && S[k+1] != S[i]) {
k = P[k];
}
if (S[k+1] == S[i])
k++;
P[i] = k;
}
}
int main() {
freopen(FILEIN, "r", stdin);
freopen(FILEOUT, "w", stdout);
for (scanf("%d\n", &T); T; T--) {
fgets(S+1, LENMAX, stdin);
if (S[strlen(S+1)] == '\n')
S[strlen(S+1)] = '\0';
Len = strlen(S+1);
prefix();
int sol = 0;
for ( int i = Len, tmp; i >= 1; i--) {
tmp = i - P[i];
if (!P[i]) continue;
if (!tmp) continue;
if (i % tmp == 0) {
sol = i;
break;
}
}
printf("%d\n", sol);
}
return 0;
}