#include <iostream>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N = 55;
int test_no = 0;
int n;
int dp[N][N];
int vis[N][N];
string s;
vector<ll> pref;
vector<ll> suf;
ll M = 1e9 + 7;
ll solve(int l, int r){
if(l >= r) return 1ll;
if(l == (r - 2)) return 1ll;
if(vis[l][r]== test_no)
return dp[l][r];
vis[l][r] = test_no;
ll ans = 1ll;
//cout<<" -> "<<l<<" "<<r<<endl;
for(int i = l + 1; i < r ; i++){
for(int j = (r - 1); j > i ; j--){
ll suml = pref[i] - pref[l];
ll sumr = suf[j] - suf[r];
if(suml == sumr) ans = (ans + solve(i,j))%M;
}
}
//cout<<"for : "<<l<<" "<<r<<" ans: "<<ans<<endl;
return dp[l][r] = ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
memset(dp,-1,sizeof(dp));
int t; cin>>t;
while(t--){
test_no++;
cin>>s; n = s.length();
pref.clear(); pref.resize(n+2,0);
suf.clear(); suf.resize(n+2,0);
for(int i = 1 ; i <=n; i++)
pref[i] = pref[i- 1] + (s[i-1] - '0');
pref[n+1] = pref[n];
for(int i = n; i>=1;i--)
suf[i] = suf[i + 1] + (s[i - 1] - '0');
suf[0] = suf[1];
cout<<solve(0, n + 1)<<endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdHlwZWRlZiBsb25nIGxvbmcgbGw7Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDU1OwppbnQgdGVzdF9ubyA9IDA7IAppbnQgbjsKaW50IGRwW05dW05dOwppbnQgdmlzW05dW05dOyAKc3RyaW5nIHM7IAp2ZWN0b3I8bGw+IHByZWY7IAp2ZWN0b3I8bGw+IHN1ZjsgCmxsIE0gPSAxZTkgKyA3OyAKCmxsIHNvbHZlKGludCBsLCBpbnQgcil7CmlmKGwgPj0gcikgcmV0dXJuIDFsbDsgCmlmKGwgPT0gKHIgLSAyKSkgcmV0dXJuIDFsbDsKaWYodmlzW2xdW3JdPT0gdGVzdF9ubykgCiAgICByZXR1cm4gZHBbbF1bcl07IAp2aXNbbF1bcl0gPSB0ZXN0X25vOyAKCmxsIGFucyA9IDFsbDsgCi8vY291dDw8IiAtPiAiPDxsPDwiICI8PHI8PGVuZGw7CmZvcihpbnQgaSA9IGwgKyAxOyBpIDwgciA7IGkrKyl7CiAgICAgIGZvcihpbnQgaiA9IChyIC0gMSk7IGogPiBpIDsgai0tKXsKICAgICAgICAgICAgbGwgc3VtbCA9IHByZWZbaV0gLSBwcmVmW2xdOyAKICAgICAgICAgICAgbGwgc3VtciA9IHN1ZltqXSAtIHN1ZltyXTsgCiAgICAgICAgICAgIGlmKHN1bWwgPT0gc3VtcikgYW5zID0gKGFucyArIHNvbHZlKGksaikpJU07IAogICAgICB9Cn0KLy9jb3V0PDwiZm9yIDogIjw8bDw8IiAiPDxyPDwiIGFuczogIjw8YW5zPDxlbmRsOwpyZXR1cm4gZHBbbF1bcl0gPSBhbnM7IAp9CmludCBtYWluKCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKCQoJCgltZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7CglpbnQgdDsgY2luPj50OyAKICAgIHdoaWxlKHQtLSl7CiAgICAgICB0ZXN0X25vKys7IAogICAgICAgY2luPj5zOyBuID0gcy5sZW5ndGgoKTsgCiAgICAgICBwcmVmLmNsZWFyKCk7IHByZWYucmVzaXplKG4rMiwwKTsgCiAgICAgICBzdWYuY2xlYXIoKTsgc3VmLnJlc2l6ZShuKzIsMCk7IAogICAgICAgZm9yKGludCBpID0gMSA7IGkgPD1uOyBpKyspIAogICAgICAgICAgcHJlZltpXSA9IHByZWZbaS0gMV0gKyAoc1tpLTFdIC0gJzAnKTsgCiAgICAgICBwcmVmW24rMV0gPSBwcmVmW25dOyAKICAgICAgIGZvcihpbnQgaSA9IG47IGk+PTE7aS0tKSAKICAgICAgICAgICBzdWZbaV0gPSBzdWZbaSArIDFdICsgKHNbaSAtIDFdIC0gJzAnKTsgCiAgICAgICBzdWZbMF0gPSBzdWZbMV07IAogICAgICAgY291dDw8c29sdmUoMCwgbiArIDEpPDxlbmRsOyAKICAgIH0KCQp9