Pagini recente » Cod sursa (job #109803) | Cod sursa (job #1886063) | Cod sursa (job #1812996) | Cod sursa (job #935511) | Cod sursa (job #1227224)
#include <fstream>
#include <cstring>
#include <cstdio>
#define DIM 1000005
using namespace std;
//ifstream f("prefix.in");
//ofstream g("prefix.out");
char S[DIM], SS[DIM];
int Pi[DIM];
int T;
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
//f >> T;
scanf("%d\n", &T);
while (T--) {
//f >> S;
scanf("%s", S);
int n = strlen(S);
strcpy(SS, S);
strcpy(S + 1, SS);
Pi[1] = 0;
for (int i = 2; i <= n; ++i) {
int q = Pi[i - 1];
while (q && S[i] != S[q + 1])
q = Pi[q];
if (S[i] == S[q + 1])
Pi[i] = q + 1;
else
Pi[i] = 0;
}
int sol = 0;
for (int i = 1; i <= n; ++i)
if (Pi[i] != 0 && i % (i - Pi[i]) == 0)
sol = i;
//g << sol << "\n";
printf("%d\n", sol);
}
return 0;
}