#include<bits/stdc++.h>
#define ll long long
#define MOD 1000000007
#define N 505
using namespace std;
ll f[N][2][2][3],g[N][2][2][3];
int T,a[N],n;
char s[N];
void inc(ll &x,ll y){
	x+=y;while(x>=MOD)x-=MOD;
}
int main(){
	int di=2;
	int dj=0;
	int dl=1;
	int dp=1;
	scanf("%d",&T);
	while(T--){
		scanf("%s",s+1);
		int n=strlen(s+1);
		for (int i=1;i<=n;i++)a[i]=s[i]-'0';
		for (int i=0;i<=n;i++)
		for (int j=0;j<2;j++)
		for (int l=0;l<2;l++)
		for (int p=0;p<3;p++) f[i][j][l][p]=g[i][j][l][p]=0;
		f[0][0][0][0]=1; g[0][0][0][0]=0;
		for (int i=0;i<n;i++)
		for (int j=0;j<2;j++)
		for (int l=0;l<2;l++)
		for (int p=0;p<3;p++){
			for (int ny=0;ny<2;ny++)
			for (int nx=0;nx<2;nx++){
					if (j==0&&ny>a[i+1]) continue;
					if (l==0&&nx>ny) continue;
					if (p==0&&nx>ny) continue;
					if (p==1&&nx<ny) continue;
					int I=i+1,J=(j==1||ny<a[I]),L=(l==1||nx<ny),P;
					if (p==0){
						if (ny>nx){
							P=1;
							inc(f[I][J][L][P],f[i][j][l][p]);
							inc(g[I][J][L][P],g[i][j][l][p]+(nx<ny)*f[i][j][l][p]);
						}
						P=0;
						inc(f[I][J][L][P],f[i][j][l][p]);
						inc(g[I][J][L][P],g[i][j][l][p]+(nx<ny)*f[i][j][l][p]);
					}
					if (p==1){
						P=nx>ny?2:1;
						inc(f[I][J][L][P],f[i][j][l][p]);
						inc(g[I][J][L][P],g[i][j][l][p]+ny*f[i][j][l][p]+(nx^1)*f[i][j][l][p]);						
					}
					if (p==2){
						P=2;
						inc(f[I][J][L][P],f[i][j][l][p]);
						inc(g[I][J][L][P],g[i][j][l][p]+ny*f[i][j][l][p]+(nx^1)*f[i][j][l][p]);						
					}
			}
		}
		ll ans=0;
		for (int j=0;j<2;j++)
		for (int l=0;l<2;l++){
			inc(ans,g[n][j][l][0]+g[n][j][l][2]);
		}
		printf("%lld\n",ans);
	}
}
