Pagini recente » Borderou de evaluare (job #996800) | Cod sursa (job #635299) | Cod sursa (job #3207423) | Cod sursa (job #809582) | Cod sursa (job #2653999)
#include <bits/stdc++.h>
using namespace std;
const int nMax = 1e6 + 13;
char a[nMax];
int n, pi[nMax], k, q, ans;
int main() {
ifstream cin("prefix.in");
ofstream cout("prefix.out");
cin >> q;
for (; q; --q) {
cin >> a + 1;
n = strlen(a + 1);
ans = 0;
k = 0;
pi[1] = 0;
for (int i = 2; i <= n; ++i) {
while (k > 0 && a[i] != a[k + 1])
k = pi[k];
if (a[i] == a[k + 1])
++k;
pi[i] = k;
if (k != 0 && k % (i - k) == 0)
ans = i;
}
cout << ans << "\n";
}
return 0;
}