RT
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
struct node {
int x,y;
};
int r,c,n,x1,y1,q[1005][2];
char map[55][55];
bool pd(int x,int y) {
if(x<1||x>r||y<1||y>c||map[x][y]=='X')
return 0;
return 1;
}
void bfs(node c) {
queue<node> s[1005];
s[1].push(c);
//while(1){
for(int i=1; i<=n; ++i) {
while(!s[i].empty()) {
//cout<<s[i].front().x<<' '<<s[i].front().y<<' '<<x<<' '<<y<<endl;
int x=s[i].front().x+q[i][0],y=s[i].front().y+q[i][1];
while(pd(x,y)) {
//cout<<i<<' ';
s[i+1].push((node) {
x,y
});
x+=q[i][0];
y+=q[i][1];
}
//cout<<endl;
s[i].pop();
}
}
while(!s[n+1].empty()) {
node w=s[n+1].front();
map[w.x][w.y]='*';
s[n+1].pop();
}
//}
}
int main() {
cin>>r>>c;
for(int i=1; i<=r; ++i) {
for(int j=1; j<=c; ++j) {
cin>>map[i][j];
if(map[i][j]=='*')
x1=i,y1=j;
}
}
cin>>n;
for(int i=1; i<=n; ++i) {
string s;
cin>>s;
switch(s[0]) {
case 'N': {
q[i][0]=-1;
q[i][1]=0;
break;
}
case 'S': {
q[i][0]=1;
q[i][1]=0;
break;
}
case 'W': {
q[i][0]=0;
q[i][1]=-1;
break;
}
case 'E': {
q[i][0]=0;
q[i][1]=1;
break;
}
}
}
bfs((node) {
x1,y1
});
for(int i=1; i<=r; ++i) {
for(int j=1; j<=c; ++j) {
if(i==x1&&j==y1)
cout<<'.';
else
cout<<map[i][j];
}
cout<<endl;
}
return 0;
}