#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define del(a,b) memset(a,b,sizeof(a))#define MOD 1000000007#define LL long longint T,len;int a[110];char op[110];LL dp[110][110][2];int n1,n2;char s[100010];int main(){scanf("%d",&T);getchar();while(T--){gets(s);len=strlen(s);n1=n2=0;for(int i=0;i<len;){if(s[i]>='0'&&s[i]<='9'){a[n1++]=0;while(s[i]>='0'&&s[i]<='9') i++;}else if(s[i]>='a'&&s[i]<='z'){a[n1++]=1;while(s[i]>='a'&&s[i]<='z') i++;}else op[n2++]=s[i++];}del(dp,0);for(int i=0;i<n1;i++) dp[i][i][a[i]]=1;for(int i=n1-1;i>=0;i--){for(int j=i+1;j<n1;j++){for(int k=i;k<j;k++){if(op[k]=='*'){dp[i][j][0]=(dp[i][j][0]+dp[i][k][0]*dp[k+1][j][0]%MOD)%MOD;dp[i][j][1]=((dp[i][j][1]+dp[i][k][0]*dp[k+1][j][1]%MOD)%MOD+dp[i][k][1]*dp[k+1][j][0]%MOD)%MOD;}else if(op[k]=='.'){dp[i][j][0]=(dp[i][j][0]+dp[i][k][1]*dp[k+1][j][1]%MOD)%MOD;}else if(op[k]=='^'){dp[i][j][1]=(dp[i][j][1]+dp[i][k][1]*dp[k+1][j][1]%MOD)%MOD;}else if(op[k]=='!'){dp[i][j][0]=(dp[i][j][0]+dp[i][k][1]*dp[k+1][j][1]%MOD)%MOD;dp[i][j][1]=(((dp[i][j][1]+dp[i][k][0]*dp[k+1][j][0]%MOD)%MOD+dp[i][k][0]*dp[k+1][j][1]%MOD)%MOD+dp[i][k][1]*dp[k+1][j][0]%MOD)%MOD;}}}}printf("%lldn",(dp[0][n1-1][0]+dp[0][n1-1][1])%MOD);}return 0;}


