Cod sursa(job #777880)
#include <fstream>
#include <cstring>
using namespace std;
const int kMaxN = 1000005;
int N, Pi[kMaxN], L;
char S[kMaxN];
ifstream fin("prefix.in");
ofstream fout("prefix.out");
void KMP() {
Pi[1] = 0;
for (int i = 2, k = 0; i <= N; ++i) {
while (k && S[i] != S[k+1])
k = Pi[k];
k += (S[i] == S[k+1]);
Pi[i] = k;
if (Pi[i] && i%(i-Pi[i]) == 0)
L = i;
}
}
void Read() {
L = 0;
fin.getline(S+1, kMaxN);
N = strlen(S+1);
}
void Print() {
fout << L << "\n";
}
int main() {
int T; fin >> T; fin.get();
for (; T; --T) {
Read();
KMP();
Print();
}
return 0;
}