#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
//英语 抄博友程序 dfs 背
struct nod{
int x1,y1,x2,y2;
string com;
}p[3000];
int num;
char da[10][10];
int mp[10][10];
int n,m;
bool check(int x,int y,int m)
{
for(int i=0;i<num;i++)
{
if(p[i].x1==x && p[i].y1==y &&mp[p[i].x2][p[i].y2]!=0)
{
if(p[i].com=="R")
{
if(mp[p[i].x2][p[i].y2]!=m)
return false;
}else
{
if(mp[p[i].x2][p[i].y2]==m)
return false;
}
}
if(p[i].x2==x && p[i].y2==y && mp[p[i].x1][p[i].y1]!=0)
{
if(p[i].com=="R")
{
if(mp[p[i].x1][p[i].y1]!=m)
return false;
}else
{
if(mp[p[i].x1][p[i].y1]==m)
return false;
}
}
}
return true;
}
bool dfs(int x,int y)
{
if(y==m+1)
{
return true;
}
for(int i=1;i<=m;i++)//抄博友程序
{
if(mp[x][i]!=0)//抄博友程序
continue;
if(check(x,i,y))
{
mp[x][i]=y;
if(x==n)
{
if(dfs(1,y+1))//背
return true;//抄博友程序
}else
{
if(dfs(x+1,y))
return true;
}
mp[x][i]=0;
}
}
return false;
}
int main()
{
int T;
cin>>T;
while(T--)
{
memset(mp,0,sizeof(mp));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>da[i][j];
}
}
int i=0;
while(1)
{
cin>>p[i].x1>>p[i].y1>>p[i].com>>p[i].x2>>p[i].y2;
if(p[i].x1==0)
{
break;
}
i++;
}
num=i;
dfs(1,1);
for(int i=1;i<=m;i++)//抄博友程序
{
//cout<<i<<endl;
for(int j=1;j<=n;j++)
{
for(int k=1;k<=m;k++)//抄博友程序
{
if(mp[j][k]==i)
{
cout<<da[j][k];
}
}
}
cout<<endl;
}
cout<<endl;
}
return 0;
}