Pagini recente » Cod sursa (job #220944) | Cod sursa (job #739029) | Cod sursa (job #1769814) | Cod sursa (job #995079) | Cod sursa (job #1342376)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
int n, i, m, j, prefix[2000005], a, k, r, f=0, c[1005];
char s[20000005], p[2000005];
void MakePrefix()
{
a=0;
prefix[1]=0;
for(j=2; j<=m; ++j)
{
a=prefix[j-1];
while(a && p[a+1]!=p[j]) a=prefix[a];
if (p[a+1]==p[j]) ++a;
prefix[j]=a;
}
}
int main()
{
int t;
cin>>t;
while (t--)
{
r=0;
cin>>(p+1);
m=strlen(p+1);
for (j=1; j<=m+3; ++j) prefix[j]=0;
MakePrefix();
for (int i=m; i>0; --i)
{
if (prefix[i]>0 && i%(i-prefix[i])==0)
{
r=i;
i=0;
}
}
cout<<r<<'\n';
}
cin>>(p+1);
return 0;
}