Pagini recente » Cod sursa (job #2965205) | Cod sursa (job #3270528) | Cod sursa (job #1706697) | Cod sursa (job #1389127) | Cod sursa (job #2518151)
#include <bits/stdc++.h>
#define MOD int(1e9+9)
#define NM 1000005
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int n, q, ok;
long long h[NM], p[NM];
char s[NM];
int main()
{
fin >> q;
fin.get();
p[0] = 1;
for(int i=1; i<NM; i++)
p[i] = (1LL*p[i-1]*31)%MOD;
while(q--)
{
fin.getline(s, NM);
n = strlen(s);
for(int i=0; i<n; i++)
h[i] = 1LL*((((i>0)?h[i-1]:0)) + (s[i]-'a'+1)*p[i]%MOD)%MOD;
ok = 0;
int ans = 0;
for(int i=n/2-1; i>=0; --i)
if((1LL*h[i]*p[i+1])%MOD == (h[2*i+1] - h[i]+MOD)%MOD)
{
ok = 1;
for(int j=2*i+1; j<n && ok; j+=i+1)
if((h[j]-h[j-i-1]+MOD)%MOD == (1LL*h[i]*p[j-i])%MOD)
ans = max(ans, j);
else ok = 0;
if(ans)
break;
}
if(ans)
fout << ans+1 << '\n';
else fout << "0\n";
}
return 0;
}