Pagini recente » Cod sursa (job #889729) | Cod sursa (job #1098924) | Cod sursa (job #2900969) | IAP #2: Concurs pentru studenti | Cod sursa (job #1536145)
#include <cstdio>
#define maxl 1000005
#include <cstring>
using namespace std;
int T,m,pos[maxl],nr,prefix[maxl];
char M[maxl];
void make_prefix();
void KMP();
int main(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&T);
int i;
while(T--){
M[0]=' ';
scanf("%s",M+1);
m=strlen(M);
nr=0;
make_prefix();
KMP();
printf("%d\n",nr);
}
return 0;
}
void make_prefix(){
int k=0;
prefix[1]=0;
for(int i=2;i<=m;i++){
while(k && M[k+1]!=M[i])k=prefix[k];
if(M[k+1]==M[i])k++;
prefix[i]=k;
}
}
void KMP(){
for(int i=m;i>=1;i--){
if(prefix[i] && i%(i-prefix[i])==0){
nr = i;
break;
}
}
}