#include <bits/stdc++.h>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int n,m,nr;
string text,s;
int lps[1000001];
void createlps(string s)
{
int i=1,j=0;
for(i=0;i<m;i++)
lps[i]=0;
i=1;
m=s.size();
while(i<m)
{
if(s[i]==s[j])
{
lps[i]=j+1;
i++;
j++;
}
else
if(j>0)
j=lps[j-1];
else
{
lps[i]=0;
i++;
}
}
}
void kmp(string text, string s)
{
n=text.size();
m=s.size();
createlps(s);
int i=0,j=0;
while(i<n)
{
if(text[i]==s[j])
{
i++;
j++;
}
else
if(j>0)
j=lps[j-1];
else
i++;
if(j==m)
{
nr++;//i-j e indexul unde l-am gasit
j=lps[j-1];
}
}
}
int main()
{
int t,i,j,k;
f>>t;
for(i=1;i<=t;i++)
{
f>>s;
createlps(s);
//for(j=0;j<s.size();j++)
// g<<lps[j]<<" ";
// g<<'\n';
nr=0;
for(j=1;j<s.size();j++)
{
//cautam daca j+1 e solutie
//daca de la 0 la j avem ceva ce se repeta
//j+1 e lungimea
//lps[j] e lungimea max prefix sufix din 0,j
if(lps[j]>0 and lps[j]%(j+1-lps[j])==0)//sau and(j+1)%(j+1-lps[j])==0)
nr=j+1;
}
g<<nr<<'\n';
}
return 0;
}