#include <cstdio>
#include <iostream>
#include <utility>
#include <string>
#define rep(i,n) for(int i=0; i<(n); i++)
#define dm(x) cerr << #x << " = " << x << endl;
using namespace std;

char map[20][21];
int H,W,N;

struct po{
  int x;
  int y;
  po operator+(po &p){
    po t={x+p.x, y+p.y};
    return t;
  }
  char &l(){return map[x][y];}
  bool v(){return 0<=x && x<H && 0<=y && y<W;}
  void d(){dm(x);dm(y);}
};

po mp(int x,int y){
  po t={x, y};
  return t;
}

int main()
{
  int T;
  scanf("%d", &T);
  rep(datasetindex, T){
    po p={0,0},d={0,0};
    char c[101];
    scanf("%d %d", &H, &W);
    rep(i,H) scanf("%s", map[i]);
    scanf("%d", &N);
    scanf("%s", c);
    dm(H);dm(W);
    rep(j,W) rep(i,H){
      switch(map[i][j]){
      case '^':p=mp(i,j);d=mp(-1,0);break;
      case '>':p=mp(i,j);d=mp(0,1);break;
      case 'v':p=mp(i,j);d=mp(1,0);break;
      case '<':p=mp(i,j);d=mp(0,-1);break;
      }
    }
    rep(i,H) printf("%d : %s\n", i, map[i]);
    p.d();d.d();
    rep(i,N){
      dm(c[i]);
      switch(c[i]){
      case 'S':{
        po s=p;
        do{s=s+d;}while(s.v() && s.l()!='*' && s.l()!='#');
        if(s.v() && s.l()=='*')
          s.l()='.';
        break;
      }
      case 'U':
        p.l()='.';
        d=mp(-1,0);
        if((p+d).v() && (p+d).l()=='.')
          p=p+d;
        p.l()='^';
        break;
      case 'R':
        p.l()='.';
        d=mp(0,1);
        if((p+d).v() && (p+d).l()=='.')
          p=p+d;
        p.l()='>';
        break;
      case 'D':
        p.l()='.';
        d=mp(1,0);
        if((p+d).v() && (p+d).l()=='.')
          p=p+d;
        p.l()='v';
        break;
      case 'L':
        p.l()='.';
        d=mp(0,-1);
        if((p+d).v() && (p+d).l()=='.')
          p=p+d;
        p.l()='<';
        break;
      }
      rep(i,H) printf("%d : %s\n", i, map[i]);
    }
  }
}
  