#include <iostream>
#include <queue>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <map>
//#include <>

using namespace std;


class Automaton{
    public:
    static const int MAXN=210;
    static const int LEAF=2;
	int trie[MAXN][LEAF],fail[MAXN];
    int end[MAXN],index[MAXN];
    int n;

	void clear(int v){
		memset(trie[v],0,sizeof(trie[v]));
		index[v]=fail[v]=end[v]=0;
	}
	
	void init(){
	    clear(0);
	    n=1;
	}
	
    int idx(char ch){
		return ch=='R';
	}
	void insert(const char* s,int value){
		int v=0;
		for (int x,i=0;s[i];i++){
			x=idx(s[i]);
			if (trie[v][x]==0){
			   clear(n);
			   trie[v][x]=n++;	
			}
			v=trie[v][x];
		}
		index[v]=1<<value;
		end[v]++;
	}
	void make(){
		queue<int> q;
		for (int i=0;i<LEAF;i++)
		    if (trie[0][i]) q.push(trie[0][i]);
		while (!q.empty()){
			int v=q.front();q.pop();
			//printf("%d\n",v);
			index[v]|=index[fail[v]];
			for (int i=0;i<LEAF;i++){
			    int &p=trie[v][i];
			    if (p==0) p=trie[fail[v]][i];
			    	else{
				    fail[p]=trie[fail[v]][i];
			    	q.push(p);
			    }
			}
		}
	}
    int find(const char *s){
        int v=0;
        int ans=0;
        for(int i=0; s[i]; i++){
			int x=idx(s[i]);
			v = trie[v][x];
			int y=v;
			while (y){
                  ans += end[y];
                  end[y] = 0; 
                  y = fail[y];   
                                  
            }
			//if (end[v]) printf("%d\n",i);
		}
		return ans;
    }
}ac;

char str[101];
int n,m,T;
int dp[3][210][210][10];
const int MOD=1000000007;

int main(){
    //freopen("1.in","r",stdin);
    //freopen("1.out","w",stdout);
    scanf("%d",&T);
    while (T--){
          scanf("%d%d",&m,&n);
          scanf("%s",str);
          ac.init();
          ac.insert(str,0);
          scanf("%s",str);
          ac.insert(str,1);
          ac.make();
          //for (int i=0;i<ac.n;i++) printf("%d %d\n",i,ac.index[i]);
          memset(dp,0,sizeof(dp));
          dp[0][0][0][0]=1;
          int now=0;
          
          //cout<<"!"<<endl;
          for (int i=0;i<n+m;i++){
              memset(dp[now^1],0,sizeof(dp[now^1]));
              for (int j=0;j<=m;j++)
                  for (int k=0;k<ac.n;k++)
                      for (int msk=0;msk<4;msk++){
                          int ret=dp[now][j][k][msk];
                          int nxt;
                          if (ret>0){
                             nxt=ac.trie[k][0];
                             //printf("%d %d %d %d\n",i,j,k,msk);
                             dp[now^1][j][nxt][ msk|ac.index[nxt] ] += ret;
                             dp[now^1][j][nxt][ msk|ac.index[nxt] ] %= MOD;
                             
                             nxt=ac.trie[k][1];
                             dp[now^1][j+1][nxt][ msk|ac.index[nxt] ] += ret;
                             dp[now^1][j+1][nxt][ msk|ac.index[nxt] ] %= MOD;                             
                          }
                      }
              now^=1;
          }
          
          int ans=0;
          for (int i=0;i<ac.n;i++){
              ans += dp[now][m][i][3];
              ans %= MOD;
          }
          
          
         // int ans=0;
          //cout<<ans<<endl;
          printf("%d\n",ans);
          
    }
    return 0;
}
//dp[i][j][k][msk] = 
