Pagini recente » Cod sursa (job #1041470) | Cod sursa (job #2200968) | Cod sursa (job #2013667) | Cod sursa (job #2485215) | Cod sursa (job #408866)
Cod sursa(job #408866)
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1000005;
int i , j , t , pi[maxn] , n , ans;
char s[maxn];
void prefix ()
{
int i , q = 0;
memset(pi,0,sizeof(pi));
for( i = 2 , pi[1] = 0; i <= n ; ++i ) {
while ( q && s[q + 1] != s[i] )
q = pi[q];
if ( s[q + 1] == s[i] )
++q;
pi[i] = q;
if ( i % ( i - pi[i] ) == 0 && q ) ans = i;
}
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
for ( scanf("%d\n",&t); t-- ; ) {
fgets ( s , maxn ,stdin);
n = strlen(s) - 1 , ans = 0;
for( i = n ; i >= 1 ; --i ) s[i] = s[i - 1];
prefix();
printf("%d\n",ans);
}
return 0;
}