Pagini recente » Diferente pentru preoni-2007/runda-2/solutii intre reviziile 23 si 24 | Cod sursa (job #1622966) | Istoria paginii utilizator/valivalica99 | Istoria paginii utilizator/katalyn | Cod sursa (job #73869)
Cod sursa(job #73869)
using namespace std;
#include <cstdio>
#include <cassert>
#include <string>
#include <sstream>
#include <algorithm>
#include <iostream>
#define FIN "prefix.in"
#define FOUT "prefix.out"
#define NMAX 1000001
#define CLEAR(X) memset ((X), 0, sizeof(X))
string a, sir;
int N, pi[NMAX];
void prefix ()
{
int k = 0;
for (int i = 2; i <= N; ++ i)
{
while (k > 0 && a[k + 1] != a[i])
k = pi[k];
if (a[k + 1] == a[i])
++ k;
pi[i] = k;
}
}
void solve ()
{
CLEAR (pi);
prefix ();
/*for (int i = 1; i <= N; ++ i)
printf ("%d ", pi[i]);
printf ("\n");*/
//cout << a;
//printf ("% d\n", N);
int K;
for (K = N; K >= 1; -- K)
if (pi[K] > 0 && K % (K - pi[K]) == 0)
break;
printf ("%d\n", K);
}
void read ()
{
int T;
scanf ("%d\n", &T);
while (T--)
{
cin >> sir;
a = " " + sir;
N = sir.size ();
solve ();
}
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
read ();
return 0;
}