Cod sursa(job #856907)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <list>
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define mp(a,b) make_pair (a, b)
#define ll long long
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
using namespace std;
char s[1000011];
int N;
int Pi[1000011];
void Precompute ()
{
for (int i = 2, p = 0; i <= N; i++)
{
for (; p > 0 && s[p + 1] != s[i];) p = Pi[p];
if (s[i] == s[p + 1]) p++;
Pi[i] = p;
}
}
int Business ()
{
for (int i = N; i >= 2; i--)
if (Pi[i] && !(i % (i - Pi[i]))) return i;
return 0;
}
int main ()
{
int T;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
fin >> T;
while (T--)
{
fin >> (s + 1);
N = strlen (s + 1);
Precompute ();
fout << Business () << "\n";
}
fin.close ();
fout.close ();
return 0;
}