//题意:
//给一串珠子,在首尾处加入最少的珠子,成为循环串,循环串的循环次数大于1
//思路:首先求出一节珠子的长度,就是n = len - next[len], len为字符串长度
//给一串珠子,在首尾处加入最少的珠子,成为循环串,循环串的循环次数大于1
//思路:首先求出一节珠子的长度,就是n = len - next[len], len为字符串长度
//然后在根据next[len]的长度求出应该补充的最小珠子数
//若next[len] 不为0,且next[len] % n = 0,则不用加入新珠子
//否则加上 n - next[len] % n个珠子
#include<iostream>
using namespace std;
#define MAXSIZ 100010
int Next[MAXSIZ];
void getNext(char * str)
{
if (!str)
{
return;
}
int i = 0, j = -1;
int len = strlen(str);
Next[i] = -1;
while (i < len)
{
if(j == -1 || str[i] == str[j])
{
++i, ++j;
Next[i] = j;
}
else
{
j = Next[j];
}
}
}
int main()
{
int t, i, len;
char str[MAXSIZ];
while(scanf("%d", &t) != EOF)
{
while(t--)
{
scanf("%s", str);
len = strlen(str);
getNext(str);
int n = len - Next[len]; //n 为一节珠子长度
if (Next[len] != 0 && (Next[len]) % n == 0)
{
printf("0\n");
}
else
{
int addNum = n - ((Next[len]) % n);
printf("%d\n", addNum);
}
}
}
return 0;
}