Cod sursa(job #799977)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
int t[1111111];
char s[1111111];
inline bool perioada(int n)
{
int k=n-t[n];
if(n%k==0 && n/k!=1)
return true;
return false;
}
void solve()
{
int i,p=0,maxim=0,k=0;
in.getline(s+1,1111111);
t[1]=0;
for(i=2;s[i];++i)
{
while(k && s[i]!=s[k+1])
k=t[k];
if(s[i]==s[k+1])
++k;
t[i]=k;
if(perioada(i))
maxim=i;
}
out<<maxim<<"\n";
}
int main()
{
int t,i;
in>>t;
in.getline(s,10);
for(i=1;i<=t;++i)
solve();
return 0;
}