#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define M1 1000000007
#define M2 998244353
#define ll long long int
#define pll pair<ll,ll>
#define mll map<ll,ll>
#define F first
#define S second
#define PB push_back
#define mp make_pair
#define lb lower_bound
#define ub upper_bound
#define V(a) vector<a>
#define endl '\n'
#define test(t) while(t--)
#define PI acos(-1.0)
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define repp(i,b,a) for(ll i=b-1;i>=a;i--)
#define clr(ar, val) memset(ar, val, sizeof(ar))
#define setbits(x) __builtin_popcountll(x)
#define zrobits(x) __builtin_ctzll(x)
#define ps(y) fixed << setprecision(y)
#define all(x) begin(x),end(x)
#define allr(x) rbegin(x),rend(x)
const int inf= 0x3f3f3f3f;
const ll INF= 0x3f3f3f3f3f3f3f3f;
const int dx[4]= { 0, -1, 0, 1 };
const int dy[4]= { -1, 0, 1, 0 };
unsigned int randInt (){
static unsigned int tx = 123456789 , ty = 362436069 , tz = 521288629 , tw = 88675123 ;
unsigned int tt = ( tx ^ ( tx << 11 ));
tx = ty ; ty = tz ; tz = tw ;
return ( tw = ( tw^ ( tw >> 19 )) ^ ( tt ^ ( tt >> 8 )) );
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template<typename T>
#define o_set(T) tree<T, null_type,less<T>, rb_tree_tag,tree_order_statistics_node_update>
//member functions :
//1. order_of_key(k) : number of elements strictly lesser than k
//2. find_by_order(k) : k-th element in the set
ll floor_div(ll a, ll b) {
return a / b - (((a ^ b) < 0) and a % b);
}
ll ceil_div(ll a, ll b){
return a / b + (((a ^ b) >= 0) and a % b);
}
inline void INP()
{
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
}
void solve()
{
string s;
cin >> s;
int dp[s.size()+5];
dp[0] = 1;
if(s[0] != '0') dp[1] = 1;
else dp[1] = 0;
for(int i=1;i<s.size();++i){
if(s[i] == '0'){
if (s[i-1] == '1' || s[i-1] == '2'){
dp[i+1] = dp[i-1];
}
else{
cout << 0 << endl;
return;
}
}
else{
dp[i+1] = dp[i];
if((s[i-1]=='1' || (s[i-1]=='2') and (s[i] - '0')<=6)){
dp[i+1] += dp[i-1];
}
}
}
cout << dp[s.size()] << endl;
}
int32_t main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
test(t){
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiNkZWZpbmUgTTEgCQkJCQkxMDAwMDAwMDA3CiNkZWZpbmUgTTIgCQkJCQk5OTgyNDQzNTMKI2RlZmluZSBsbCAJCQkJCWxvbmcgbG9uZyBpbnQKI2RlZmluZSBwbGwgCQkJCXBhaXI8bGwsbGw+CiNkZWZpbmUgbWxsIAkJCQltYXA8bGwsbGw+CiNkZWZpbmUgRiAJCQkJCWZpcnN0CiNkZWZpbmUgUyAJCQkJCXNlY29uZAojZGVmaW5lIFBCIAkJCQkJcHVzaF9iYWNrCiNkZWZpbmUgbXAgCQkJCQltYWtlX3BhaXIKI2RlZmluZSBsYiAJCQkJCWxvd2VyX2JvdW5kCiNkZWZpbmUgdWIgCQkJCQl1cHBlcl9ib3VuZAojZGVmaW5lIFYoYSkgCQkJCXZlY3RvcjxhPgojZGVmaW5lIGVuZGwgCQkJCSdcbicKI2RlZmluZSB0ZXN0KHQpIAkJCXdoaWxlKHQtLSkKI2RlZmluZSBQSSAJCQkJCWFjb3MoLTEuMCkKI2RlZmluZSByZXAoaSxhLGIpIAkJCWZvcihsbCBpPWE7aTxiO2krKykKI2RlZmluZSByZXBwKGksYixhKSAJCWZvcihsbCBpPWItMTtpPj1hO2ktLSkKI2RlZmluZSBjbHIoYXIsIHZhbCkJCW1lbXNldChhciwgdmFsLCBzaXplb2YoYXIpKQojZGVmaW5lIHNldGJpdHMoeCkgCQkJX19idWlsdGluX3BvcGNvdW50bGwoeCkKI2RlZmluZSB6cm9iaXRzKHgpIAkJCV9fYnVpbHRpbl9jdHpsbCh4KQojZGVmaW5lIHBzKHkpIAkJCQlmaXhlZCA8PCBzZXRwcmVjaXNpb24oeSkKI2RlZmluZSBhbGwoeCkgCQkJCWJlZ2luKHgpLGVuZCh4KQojZGVmaW5lIGFsbHIoeCkgCQkJcmJlZ2luKHgpLHJlbmQoeCkKY29uc3QgaW50IGluZj0gCQkJCTB4M2YzZjNmM2Y7CmNvbnN0IGxsIElORj0gCQkJCTB4M2YzZjNmM2YzZjNmM2YzZjsKY29uc3QgaW50IGR4WzRdPSAJCQl7IDAsIC0xLCAwLCAxIH07CmNvbnN0IGludCBkeVs0XT0gCQkJeyAtMSwgMCwgMSwgMCB9OwoKdW5zaWduZWQgIGludCAgcmFuZEludCAoKXsgCiAgICBzdGF0aWMgIHVuc2lnbmVkICBpbnQgIHR4ICA9ICAxMjM0NTY3ODkgLCAgdHkgPSAzNjI0MzYwNjkgLCAgdHogPSA1MjEyODg2MjkgLCAgdHcgPSA4ODY3NTEyMyA7IAogICAgdW5zaWduZWQgIGludCAgdHQgID0gICggdHggXiAoIHR4IDw8IDExICkpOyAKICAgIHR4ICA9ICB0eSA7ICB0eSAgPSAgdHogOyAgdHogID0gIHR3IDsgCiAgICByZXR1cm4gICggIHR3ID0gKCB0d14gKCB0dyA+PiAxOSApKSBeICggdHQgXiAoIHR0ID4+IDggKSkgICk7IAp9CgptdDE5OTM3IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgojZGVmaW5lIG9fc2V0KFQpIHRyZWU8VCwgbnVsbF90eXBlLGxlc3M8VD4sIHJiX3RyZWVfdGFnLHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4KLy9tZW1iZXIgZnVuY3Rpb25zIDoKLy8xLiBvcmRlcl9vZl9rZXkoaykgOiBudW1iZXIgb2YgZWxlbWVudHMgc3RyaWN0bHkgbGVzc2VyIHRoYW4gawovLzIuIGZpbmRfYnlfb3JkZXIoaykgOiBrLXRoIGVsZW1lbnQgaW4gdGhlIHNldAoKbGwgZmxvb3JfZGl2KGxsIGEsIGxsIGIpIHsKCXJldHVybiBhIC8gYiAtICgoKGEgXiBiKSA8IDApIGFuZCBhICUgYik7Cn0KbGwgY2VpbF9kaXYobGwgYSwgbGwgYil7CiAgICByZXR1cm4gYSAvIGIgKyAoKChhIF4gYikgPj0gMCkgYW5kIGEgJSBiKTsKfQoKaW5saW5lIHZvaWQgSU5QKCkKewoJI2lmbmRlZiBPTkxJTkVfSlVER0UKCSAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7ICAgCgkgICAgZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCk7CgkjZW5kaWYgCn0KCnZvaWQgc29sdmUoKQp7CiAgICBzdHJpbmcgczsKICAgIGNpbiA+PiBzOwogICAgICAgICAgICAKCWludCBkcFtzLnNpemUoKSs1XTsKCWRwWzBdID0gIDE7CglpZihzWzBdICE9ICcwJykgZHBbMV0gPSAxOwoJZWxzZSBkcFsxXSA9IDA7Cglmb3IoaW50IGk9MTtpPHMuc2l6ZSgpOysraSl7CgkJaWYoc1tpXSA9PSAnMCcpewkJCgkJCWlmIChzW2ktMV0gPT0gJzEnIHx8IHNbaS0xXSA9PSAnMicpewoJCQkJZHBbaSsxXSA9IGRwW2ktMV07CgkJCX0KCQkJZWxzZXsKCQkJCWNvdXQgPDwgMCA8PCBlbmRsOwoJCQkJcmV0dXJuOwoJCQl9CgkJfQoJCWVsc2V7CgkJCWRwW2krMV0gPSBkcFtpXTsKCQkJaWYoKHNbaS0xXT09JzEnIHx8IChzW2ktMV09PScyJykgYW5kIChzW2ldIC0gJzAnKTw9NikpewoJCQkJZHBbaSsxXSArPSBkcFtpLTFdOwoJCQl9CgkJfQoJfQogICAgY291dCA8PCBkcFtzLnNpemUoKV0gPDwgZW5kbDsKfQoKaW50MzJfdCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiAgICBpbnQgdD0xOwogICAgY2luPj50OwogICAgdGVzdCh0KXsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=