Pagini recente » Cod sursa (job #1521329) | Cod sursa (job #576503) | Cod sursa (job #1386636) | Cod sursa (job #1507294) | Cod sursa (job #671024)
Cod sursa(job #671024)
#include<stdio.h>
#include<assert.h>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
string a;
int sol,prefix[1010000];
void read()
{
cin >> a;
}
void get_prefix()
{
int i,j=0;
prefix[0]=-1;
for(i=1;i<a.size();++i)
{
prefix[i]=-1;
while(j!=-1)
{
if(a[i]==a[j])
{
prefix[i]=j;
++j;
break;
}
j=prefix[j];
}
if(j==-1)
{
j=0;
if(a[i]==a[j])
{
prefix[i]=0;
++j;
}
}
}
}
void print_prefix()
{
int i;
for(i=0;i<a.size();++i)
printf("%d ",prefix[i]);
printf("\n");
}
void solve()
{
get_prefix();
//print_prefix();
int i;
sol=0;
for(i=1;i<a.size();++i)
if((i+1)%(i-prefix[i])==0 && prefix[i]!=-1)
sol=i+1;
}
void write()
{
printf("%d\n",sol);
}
int main()
{
assert(freopen("prefix.in","r",stdin)!=NULL);
assert(freopen("prefix.out","w",stdout)!=NULL);
int i,t;
scanf("%d\n",&t);
for(i=1;i<=t;++i)
{
read();
solve();
write();
}
return 0;
}