Pagini recente » Borderou de evaluare (job #2826280) | Atasamentele paginii Profil Apetrei_Razvan | Borderou de evaluare (job #2216274) | Cod sursa (job #1401600)
#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];
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;
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
bool u=1;
cin>>p;
m=p.size(); p=" "+p;
MakePrefix();
for(i=m; i>0; --i)
if (prefix[i]>0 && i%(i-prefix[i])==0)
cout<<i<<'\n', i=0, u=0;
if (u) cout<<"0\n";
}
return 0;
}