#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 401;
const int mod = 1e9 + 7;
int t, n, m, dp[N][N][N];
string S, T;
int dfs(int i, int j, int k, int l) {
if (i > n)
return (j == m) && (!k) && (!l);
if (dp[i][j][k])
return dp[i][j][k];
int ans = 0;
if (S[i - 1] == '-') {
if (k)
ans = (ans + dfs(i + 1, j, k - 1, l)) % mod;
if (l)
ans = (ans + dfs(i + 1, j, k, l - 1)) % mod;
} else {
ans = dfs(i + 1, j, k, l + 1) % mod;
if (!j && !l)
ans = (ans + dfs(i + 1, j, k + 1, l)) % mod;
if (S[i - 1] == T[j] && !l)
ans = (ans + dfs(i + 1, j + 1, k, l)) % mod;
}
return dp[i][j][k] = (ans % mod);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
#ifdef BIG_BANANA_A_BIG_BANANA_YOUR_FEEL_VERY_WORDFUL
freopen(".in", "r", stdin);
freopen(".out", "w", stdout);
#endif
cin >> t;
while (t--) {
cin >> n >> m >> S >> T;
memset(dp, 0, sizeof(dp));
cout << dfs(1, 0, 0, 0) << endl;
}
return 0;
}