#include<bits/stdc++.h>
#define FO(x)\
freopen(#x".in","r",stdin);\
freopen(#x".out","w",stdout);
using namespace std;
const int mod = 1e9+7;
const int MAX = 410;
int n,m,ans;
char a[MAX],b[MAX];
int c[MAX];
long long f[MAX][MAX][MAX];
int main(){
int T;
cin >> T;
while(T--){
cin >> n >> m;
memset(f,0,sizeof(f));
cin >> a+1; cin >> b+1;
f[0][0][0] = 1;
for(int i=1;i<=n;i++)
if(a[i] == '-')
c[i] = c[i-1]-1;
else
c[i] = c[i-1]+1;
for(int i=1;i<=n;i++)
for(int j=0;j<=min(i,c[i-1]);j++)
for(int k=0;k<=c[i-1]-j;i++){
int l = c[i-1]-k-j;
if(a[i] == '-'){
if(k)
f[i][j][k-1] = (f[i-1][j][k]+f[i][j][k-1])%mod;
if(l)
f[i][j][k] = (f[i][j][k]+f[i-1][j][k])%mod;
}
else{
f[i][j][k] = (f[i][j][k]+f[i-1][j][k])%mod;
if(j == 0 && l == 0)
f[i][j][k+1] = (f[i][j][k+1]+f[i-1][j][k])%mod;
if(a[i] == b[j+1] && l == 0)
f[i][j+1][k] = (f[i-1][j][k]+f[i][j+1][k])%mod;
}
}
cout << f[n][m][0] << "\n";
}
return 0;
}