Cod sursa(job #819560)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int N=1000005;
char s[N];
int pi[N];
int main()
{
int n,m,k,i;
bool ok;
in>>m;
while(m--)
{
in>>s+1;
k=0;
pi[1]=0;
n=strlen(s);
for(i=2;s[i]!='\0';i++)
{
while(s[k+1]!=s[i] && k>0)
k=pi[k];
if(s[k+1]==s[i])
k++;
pi[i]=k;
}
n=i-1;
ok=false;
for(i=n;i>=1;i--)
{
if(i%(i-pi[i])==0 && pi[i]!=0)
{
out<<i<<"\n";
ok=true;
break;
}
}
if(!ok)
out<<"0\n";
}
return 0;
}