Pagini recente » Cod sursa (job #393423) | Cod sursa (job #191722) | Cod sursa (job #2311317) | Cod sursa (job #1449157) | Cod sursa (job #1105753)
#include <cstdio>
#include <cstring>
#define Lmax 1000005
using namespace std;
char A[Lmax];
int N,T,P[Lmax];
void make_prefix()
{
int i , q = 0;
for(i = 2; i <= N; ++i)
{
while(q && A[i] != A[q+1])
q = P[q];
if(A[i] == A[q+1])
++q;
P[i] = q;
}
}
void get_period()
{
for(int i = N; i >= 1; --i)
if(P[i] && i - P[i] && i % (i-P[i]) == 0)
{
printf("%d\n",i);
return;
}
printf("0\n");
}
int main()
{
freopen ( "prefix.in" , "r" , stdin );
freopen ( "prefix.out" , "w" , stdout );
scanf( "%d" , &T );
while( T-- )
{
scanf("%s",A+1);A[0] = '*';
N = strlen(A) - 1;
make_prefix();
get_period();
}
return 0;
}