Pagini recente » Cod sursa (job #3234547) | Cod sursa (job #47440) | Cod sursa (job #2382097) | Cod sursa (job #609445) | Cod sursa (job #2316999)
#include <bits/stdc++.h>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
const int NMAX=1e6+5;
char A[NMAX];
int phi[NMAX];
inline void KMP ()
{
int N=(int)strlen(A);
phi[0]=0;
int ans=0;
for(int i=1; i<N; ++i)
{
while(ans && A[i] != A[ans])
ans=phi[ans-1];
if(A[i] == A[ans])
++ans;
phi[i]=ans;
}
}
inline void Solve ()
{
int N=(int)strlen(A);
int ans=0;
for(int i=0; i<N; ++i)
if(phi[i])
if((i+1)%(i+1-phi[i]) == 0)
ans=i+1;
g<<ans<<'\n';
}
inline void Read ()
{
int Q;
f.tie(NULL);
f>>Q;
while(Q--)
{
f>>A;
KMP();
Solve();
}
}
int main()
{
Read();
return 0;
}