Pagini recente » Cod sursa (job #28313) | Cod sursa (job #3237208) | Cod sursa (job #369980) | Cod sursa (job #1076106) | Cod sursa (job #3204968)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
#define NMAX 1000005
char s[NMAX];
int p[NMAX];
int l;
void build() {
int k = 0;
for (int i = 2; i <= l; ++i) {
while (k > 0 && s[i] != s[k + 1]) {
k = p[k];
}
if (s[i] == s[k + 1]) {
k++;
}
p[i] = k;
}
}
int main() {
int t;
fin >> t;
fin.get();
while (t--) {
fin.getline(s + 1, NMAX - 1);
s[0] = 'a';
l = strlen(s) - 1;
build();
bool gasit = 0;
for (int i = l; i >= 1 && !gasit; --i) {
if (i % (i - p[i]) == 0 && p[i]) {
fout << i << '\n';
gasit = 1;
}
}
if (!gasit) {
fout << "0\n";
}
}
return 0;
}