Pagini recente » Cod sursa (job #2700212) | Cod sursa (job #1183422) | Cod sursa (job #906467) | Cod sursa (job #789071) | Cod sursa (job #2304982)
#include <iostream>
#include <cstdio>
#include <string>
#define MAXN 1000000
using namespace std;
string s;
int z[MAXN+5];
const int BUFF=4096;
int curs=4095;
char buff[BUFF];
char nextch( )
{
curs++;
if( curs==BUFF )
{
curs=0;
fread(buff,1,BUFF,stdin);
}
return buff[curs];
}
char getch( )
{
char c=nextch();
while( c==' ' )
c=nextch();
return c;
}
inline int maxim( int a, int b )
{
if( a<b )
a=b;
return a;
}
inline void zet( )
{
z[0]=s.size();
int st=0, dr=0;
for( int i=1;i<s.size();i++ )
{
z[i]=z[i-st];
if( i+z[i]>=dr )
{
z[i]=maxim(0,dr-i);
st=i;
dr=i+z[i];
}
while( i+z[i]<s.size() && s[z[i]]==s[i+z[i]] )
{
z[i]++;
dr++;
}
}
}
int main()
{
freopen( "prefix.in", "r", stdin );
freopen( "prefix.out", "w", stdout );
int t;
cin>>t;
char c=getch();
while( t )
{
c=getch();
s.clear();
do
{
s+=c;
c=getch();
}
while( c!='\n' );
zet();
int ans=0;
for( int i=1;i<s.size();i++ )
if( z[i]>=i )
ans=maxim(ans,i+z[i]-z[i]%i);
cout<<ans<<endl;
t--;
}
return 0;
}