Pagini recente » Cod sursa (job #1444595) | Cod sursa (job #1555846) | Cod sursa (job #1853847) | Cod sursa (job #1451053) | Cod sursa (job #1304364)
#include <fstream>
#include <string>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int N, n, k, V[1000010];
string S;
void Prefix()
{
k = 0; n = S.size();
for (int i = 1; i < n; i++)
{
if (k && S[k] != S[i]) k = V[k-1];
if (S[k] == S[i]) k++;
V[i] = k;
}
}
int Solve()
{
Prefix();
for (int i = n - 1; i > 0; i--)
{
if ((i+1) % ((i+1) - V[i]) == 0 && V[i] > 0) return i + 1;
}
return 0;
}
int main()
{
fin >> N;
for (int i = 1; i <= N; i++)
{
fin >> S;
fout << Solve() << '\n';
}
fout.close();
return 0;
}