Pagini recente » Arhiva de probleme | Cod sursa (job #2622378) | Cod sursa (job #3259902) | Cod sursa (job #579572) | Cod sursa (job #1965449)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
const int maxn = 1e6 + 5;
char S[maxn];
int Pi[maxn], n;
void Prefix() {
int x = 0;
memset(Pi, 0, sizeof(Pi));
for (int i = 2; i <= n; i++) {
while (x > 0 && S[x + 1] != S[i]) x = Pi[x];
if (S[x + 1] == S[i]) x++;
Pi[i] = x;
}
}
void Solve_test() {
fin >> (S + 1);
n = strlen(S + 1);
Prefix();
int maxx = 0;
for (int i = n; i > 0; i--) {
if (Pi[i] != 0 && i % (i - Pi[i]) == 0) {
maxx = i;
i = 0;
}
}
fout << maxx << "\n";
}
int main() {
ios_base :: sync_with_stdio (false);
int t;
fin >> t;
while (t--) {
Solve_test();
}
fin.close();
fout.close();
return 0;
}