#include<bits/stdc++.h>
using namespace std;
int x,y;
int n;
int r,c;
char a[60][60];
bool mp[60][60];
char f[1005];
const char N='N';
const char S='S';
const char W='W';
const char E='E';
struct wz{
int i;
int j;
};
bool zq(int x,int y){
if(x<=r&&x>=1&&y<=c&&y>=1){
return true;
}
else{
return false;
}
}
void bfs(){
queue<wz> q;
wz l;
l.i =x;
l.j =y;
q.push(l);
int lever=1;
while(lever<=n){
int len=q.size();
for(int i=0;i<len;i++){
l=q.front();
q.pop();
int x1=l.i;
int y1=l.j;
mp[x1][y1]=false;
if(f[lever]==N){
x1--;
while(a[x1][y1]!='X'&&zq(x1,y1)){
l.i--;
x1--;
//if(mp[x1][y1]==false){
q.push(l);
mp[x1][y1]=true;
//}
}
}
else if(f[lever]==S){
x1++;
while(a[x1][y1]!='X'&&zq(x1,y1)){
l.i++;
x1++;
//if(mp[x1][y1]==false){
q.push(l);
mp[x1][y1]=true;
//}
}
}
else if(f[lever]==W){
y1--;
while(a[x1][y1]!='X'&&zq(x1,y1)){
l.j--;
y1--;
//if(mp[x1][y1]==false){
q.push(l);
mp[x1][y1]=true;
//}
}
}
else if(f[lever]==E){
y1++;
while(a[x1][y1]!='X'&&zq(x1,y1)){
l.j++;
y1++;
//if(mp[x1][y1]==false){
q.push(l);
mp[x1][y1]=true;
//}
}
}
}
lever++;
}
while(q.size()>0){
l=q.front();
q.pop();
a[l.i][l.j]='*';
}
}
int main(){
scanf("%d%d",&r,&c);
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>a[i][j];
if(a[i][j]=='*'){
x=i;
y=j;
a[x][y]='.';
}
}
}
for(int i=1;i<=50;i++){
for(int j=1;j<=50;j++){
mp[i][j]=false;
}
}
cin>>n;
string l;
for(int i=1;i<=n;i++){
cin>>l;
if(l=="NORTH"){
f[i]='N';
}
if(l=="SOUTH"){
f[i]='S';
}
if(l=="WEST"){
f[i]='W';
}
if(l=="EAST"){
f[i]='E';
}
}
bfs();
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
return 0;
}