#include<bits/stdc++.h>
using namespace std;
#define maxn 1043456
int m,k,T,nun=0,zz[26][maxn];
long long base=478923,momo=141919810,xx,ans,a[maxn];
long long bss[maxn];
long long jie,jizhuner;
int daner,bianjier,zxp;
bool flagioi;
int there[100],kioio;
int czx[200];
long long suan(int x,int y)
{
return (a[y]+momo-a[x-1]*bss[y-x+1]%momo)%momo;
}
void intakioi()
{
char x; x=getchar();
while(x<'a'||x>'z'){ x=getchar(); }
while('a'<=x&&x<='z')
{
if(!czx[x])
{
there[++kioio]=x-'a';
czx[x]=kioio;
}
a[++nun]=( a[nun-1]*base+x)%momo;
for(int i=1;i<=kioio;i++) zz[there[i]][nun]=zz[there[i]][nun-1];
zz[there[czx[x]]][nun]++;
x=getchar();
}
bss[0]=1;
bss[1]=base;
for(int i=2;i<=nun;i++) bss[i]=bss[i-1]*base%momo;
return;
}
void memx()
{
memset(zz,0,sizeof(zz));
memset(a,0,sizeof(a));
ans=0;
nun=0;
kioio=0;
memset(czx,0,sizeof(czx));
return;
}
int kioi,zpioi;
int qiujishu(int l,int r)
{
zpioi=0;
for(int i=1;i<=kioio;i++)
{
kioi=zz[there[i]][r]-zz[there[i]][l-1];
if((kioi)%2==1) zpioi++;
}
return zpioi;
}
void pao(int i)
{
flagioi=0;
daner=jie/i;
if(i>1)
{
jizhuner=suan(1,daner);
// cout<<"zhun "<<jizhuner<<endl;
for(int k=1;k<i;k++)
{
//cout<<suan(k*daner+1,(k+1)*daner)<<"\n";
if(suan(k*daner+1,(k+1)*daner)!=jizhuner)
{
flagioi=1;
break;
}
}
if(flagioi) return;
}
for(int kx=1;kx<daner;kx++)
{
if(qiujishu(1,kx)<=zxp) ans++;
}
return;
}
void dfsp()
{
for(jie=2;jie<nun;jie++)//1 to jie
{
zxp=qiujishu(jie+1,nun);
//cout<<jie+1<<":"<<endl;
bianjier=sqrt(jie);
for(int pzz=1;pzz<=bianjier;pzz++)
{
if(jie%pzz==0)
{
pao(pzz);
if(pzz*pzz!=jie)
pao(jie/pzz);
}
}
}
return;
}
int main()
{
cin>>T;
while(T--)
{
memx();
intakioi();
dfsp();
printf("%lld\n",ans);
}
return 0;
}
全wa