Pagini recente » Cod sursa (job #2841197) | Cod sursa (job #2082874) | Cod sursa (job #2041912) | Cod sursa (job #73075) | Cod sursa (job #1401593)
#include <fstream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include<cstring>
using namespace std;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
const int O=1000005;
int n, i, j, m, a, x, prefix[O], MX;
string p;
void MakePrefix(){
a=prefix[1]=0;
for(j=2; j<=m; ++j)
{
while(a && p[a+1]!=p[j]) a=prefix[a];
if (p[a+1]==p[j]) ++a;
prefix[j]=a;
if (prefix[j]>MX) MX=prefix[j], x=j;
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
MX=x=0;
cin>>p;
m=p.size(); p=" "+p;
MakePrefix();
if (MX==0) cout<<0<<'\n'; else
cout<<(MX/(x-MX)+1)*(x-MX)<<'\n';
}
return 0;
}