Pagini recente » Cod sursa (job #393439) | Cod sursa (job #1734526) | Cod sursa (job #73508) | Cod sursa (job #2810794) | Cod sursa (job #2974885)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#ifdef LOCAL
ifstream fin("input.txt");
#define fout cout
#else
ifstream fin("prefix.in");
ofstream fout("prefix.out");
#include <bits/stdc++.h>
#define endl '\n'
#endif
const int NMAX = 1e6+5;
int n;
char s[NMAX];
int lps[NMAX];
void reset() {
memset(s, 0, sizeof(s));
memset(lps, 0, sizeof(lps));
}
void read() {
fin >> s;
n = strlen(s);
}
void build_lps(int lps[], char a[], int n) {
int j = 0;
for (int i = 1; i < n; i++) {
if (a[i] == a[j]) {
lps[i] = ++j;
} else {
if (j == 0) {
lps[i] = 0;
} else {
j = lps[j - 1];
i--;
}
}
}
}
int solve() {
build_lps(lps, s, n);
int ans = 0;
for (int i = 0; i < n; i++) {
if (lps[i] == 0) continue;
int len = i - lps[i] + 1;
if ((i + 1) % len == 0)
ans = i + 1;
}
return ans;
}
int main() {
int t;
fin >> t;
while (t--) {
reset();
read();
fout << solve() << endl;
}
return 0;
}