题目链接
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=100000007;
int dp[10005];
int num[10005];
void init(){
memset(dp,0,sizeof(dp));
memset(num,0,sizeof(num));
}
int main(){
int T;
cin>>T;
while(T--){
char s[10005];
scanf("%s",s);
int n=strlen(s);
for(int i=0;i<n;i++){
num[i+1]=s[i]-'0';
}
ll ans0=1,ans1=1,ans2=1;
dp[1]=0;
int k=1;
if(1){
for(int i=2;i<=n;i++){
dp[i]=num[i-1]-dp[i-1]-dp[i-2];
if(dp[i]<0||dp[i]>2){
k=0;break;
}
}
if(num[n]==dp[n]+dp[n-1]&&k){
for(int i=1;i<=n;i++){
if(dp[i]==1)ans0*=2;
ans0%=mod;
}
}
else ans0=0;
}
dp[1]=1;k=1;
if(num[1]>=1){
for(int i=2;i<=n;i++){
dp[i]=num[i-1]-dp[i-1]-dp[i-2];
if(dp[i]<0||dp[i]>2){
k=0;break;
}
}
if(num[n]==dp[n]+dp[n-1]&&k){
for(int i=1;i<=n;i++){
if(dp[i]==1)ans1*=2;
ans1%=mod;
}
}
else ans1=0;
}
else {
ans1=0;
}
dp[1]=2;k=1;
if(num[1]>=2){
for(int i=2;i<=n;i++){
dp[i]=num[i-1]-dp[i-1]-dp[i-2];
if(dp[i]<0||dp[i]>2){
k=0;break;
}
}
if(num[n]==dp[n]+dp[n-1]&&k){
for(int i=1;i<=n;i++){
if(dp[i]==1)ans2*=2;
ans2%=mod;
}
}
else ans2=0;
}
else {
ans2=0;
}
printf("%lld\n",(ans0+ans1+ans2)%mod);
}
}