#include <bits/stdc++.h>
using namespace std;
#define ll long long
string s;
ll const m=1e9+9;
ll const p=31;
int const siz=1e5;
ll hashpre[siz];
ll inv_p[siz];
ll poww(ll x, ll n) {
long temp;
if (n==0)
return 1ll;
temp=poww(x,n/2);
if (n%2==0)
return ((temp%m)*(temp%m))%m;
else
return (((x*(temp%m))%m)*(temp%m))%m;
}
void precomputation() { //calculates mod multiplicative inverse for all powers of p
inv_p[0]=1;
ll invp=poww(p,m-2);
for (int i=1;i<=siz;i++)
inv_p[i]= (inv_p[i-1]*invp)%m;
}
void computehashpre() { //computes hash of all prefixes
ll prevp=p;
hashpre[0]=1;
for (int i=1;i<s.size();i++) {
hashpre[i]= (hashpre[i-1] + ((s[i]-'a'+1)*prevp)%m)%m;
prevp= (prevp*p)%m;
}
}
ll hashh(int i,int j) {
//hash(i,j) = (hash(0,j)-hash(0,i-1))*(multiplicative modulo inverse of p^i)
if (i!=0) {
ll res=hashpre[j]-hashpre[i-1];
if (res<0) res+=m;
else res%=m;
return (res*inv_p[i])%m;
}
else
return hashpre[j]%m;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
precomputation(); //calculates mod multiplicative inverse for all powers of p
int t; cin>>t;
while (t--) {
cin>>s;
computehashpre(); //computes hash of all prefixes
int counter=0;
for (int i=1;i<s.size()-2;i=i+2) {
if (hashh(0,i/2)==hashh(i/2 +1,i) && hashh(i+1,(s.size()-1-i)/2 +i)==hashh((s.size()-1-i)/2 +i+1,s.size()-1))
counter++;
}
cout<<counter<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCgpzdHJpbmcgczsKbGwgY29uc3QgbT0xZTkrOTsKbGwgY29uc3QgcD0zMTsgCmludCBjb25zdCBzaXo9MWU1OwpsbCBoYXNocHJlW3Npel07CmxsIGludl9wW3Npel07CgpsbCBwb3d3KGxsIHgsIGxsIG4pIHsKICAgIGxvbmcgdGVtcDsKICAgIGlmIChuPT0wKQogICAgICAgIHJldHVybiAxbGw7CiAgICB0ZW1wPXBvd3coeCxuLzIpOwogICAgaWYgKG4lMj09MCkKICAgICAgICByZXR1cm4gKCh0ZW1wJW0pKih0ZW1wJW0pKSVtOwogICAgZWxzZQogICAgICAgIHJldHVybiAoKCh4Kih0ZW1wJW0pKSVtKSoodGVtcCVtKSklbTsKfQoKdm9pZCBwcmVjb21wdXRhdGlvbigpIHsgLy9jYWxjdWxhdGVzIG1vZCBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIGZvciBhbGwgcG93ZXJzIG9mIHAKICAgIGludl9wWzBdPTE7CiAgICBsbCBpbnZwPXBvd3cocCxtLTIpOwogICAgZm9yIChpbnQgaT0xO2k8PXNpejtpKyspCiAgICAgICAgaW52X3BbaV09IChpbnZfcFtpLTFdKmludnApJW07Cn0KCnZvaWQgY29tcHV0ZWhhc2hwcmUoKSB7IC8vY29tcHV0ZXMgaGFzaCBvZiBhbGwgcHJlZml4ZXMKICAgIGxsIHByZXZwPXA7CiAgICBoYXNocHJlWzBdPTE7CiAgICBmb3IgKGludCBpPTE7aTxzLnNpemUoKTtpKyspIHsKICAgICAgICBoYXNocHJlW2ldPSAoaGFzaHByZVtpLTFdICsgKChzW2ldLSdhJysxKSpwcmV2cCklbSklbTsKICAgICAgICBwcmV2cD0gKHByZXZwKnApJW07CiAgICB9Cn0KCmxsIGhhc2hoKGludCBpLGludCBqKSB7CgkvL2hhc2goaSxqKSA9IChoYXNoKDAsaiktaGFzaCgwLGktMSkpKihtdWx0aXBsaWNhdGl2ZSBtb2R1bG8gaW52ZXJzZSBvZiBwXmkpCiAgICBpZiAoaSE9MCkgewogICAgICAgIGxsIHJlcz1oYXNocHJlW2pdLWhhc2hwcmVbaS0xXTsKICAgICAgICBpZiAocmVzPDApIHJlcys9bTsKICAgICAgICBlbHNlIHJlcyU9bTsKICAgICAgICByZXR1cm4gKHJlcyppbnZfcFtpXSklbTsKICAgIH0KICAgIGVsc2UKICAgICAgICByZXR1cm4gaGFzaHByZVtqXSVtOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIHByZWNvbXB1dGF0aW9uKCk7IC8vY2FsY3VsYXRlcyBtb2QgbXVsdGlwbGljYXRpdmUgaW52ZXJzZSBmb3IgYWxsIHBvd2VycyBvZiBwCiAgICBpbnQgdDsgY2luPj50OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGNpbj4+czsKICAgICAgICBjb21wdXRlaGFzaHByZSgpOyAvL2NvbXB1dGVzIGhhc2ggb2YgYWxsIHByZWZpeGVzCiAgICAgICAgaW50IGNvdW50ZXI9MDsKICAgICAgICBmb3IgKGludCBpPTE7aTxzLnNpemUoKS0yO2k9aSsyKSB7CiAgICAgICAgICAgIGlmIChoYXNoaCgwLGkvMik9PWhhc2hoKGkvMiArMSxpKSAmJiBoYXNoaChpKzEsKHMuc2l6ZSgpLTEtaSkvMiAraSk9PWhhc2hoKChzLnNpemUoKS0xLWkpLzIgK2krMSxzLnNpemUoKS0xKSkKICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKICAgICAgICB9CiAgICAgICAgY291dDw8Y291bnRlcjw8ZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9