kmp求让一个字符串有两个循环节,所需要加的最少的字符.
n-next【n】就是循环节.
如果n能整除循环节,说明n是循环的,循环的次数就是除法所得的商

#include<cstdio>
#include<cstring>
const int maxn=1000005;
int next[maxn],f[maxn];
char a[maxn],b[maxn];
int main(){
   
	int t;
	scanf("%d",&t);
	while(t--){
   
		scanf("%s",a+1);
		int n=strlen(a+1);
		next[1]=0;
		for(int i=2,j=0;i<=n;i++){
   
			while(j>0&&a[i]!=a[j+1])	j=next[j];
			if(a[i]==a[j+1])	j++;
			next[i]=j;
		}
		if(next[n]==0)	printf("%d\n",n);
		else{
   
			int t=n-next[n];
	        if(n%t==0)printf("0\n");
	        else{
   
	            printf("%d\n",t-n%t);
	        }
		}
	}
	return 0;
}