#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
int xx;
int yy;
int t;
};
int movex[4]={-1,1,0,0};
int movey[4]={0,0,1,-1};
int member[55][55][1005],road[1005];
char maps[55][55];
int main(){
int xl,yl;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>maps[i][j];
if(maps[i][j]=='*')xl=i,yl=j;
}
}
maps[xl][yl]='.';
string s;
int R;
cin>>R;
for(int i=0;i<R;i++){
cin>>s;
if(s[0]=='N')road[i]=0;
if(s[0]=='S')road[i]=1;
if(s[0]=='E')road[i]=2;
if(s[0]=='W')road[i]=3;
}
queue<node>q;
q.push(node{xl,yl,0});
while(!q.empty()){
node now=q.front();
q.pop();
int i=1;
if(now.t==R)maps[now.xx][now.yy]='*';
else while(true){
int t=now.t;
if(now.xx+movex[road[t]]*i>=0&&now.xx+movex[road[t]]*i<n&& now.yy+movey[road[t]]*i>=0&&
now.yy+movey[road[t]]*i<m&&maps[now.xx+movex[road[t]]*i][now.yy+movey[road[t]]*i]!='X'){
if(member[now.xx+movex[road[t]]*i][now.yy+movey[road[t]]*i][t+1]==0)
member[now.xx+movex[road[t]]*i][now.yy+movey[road[t]]*i][t+1]=1;
q.push(node{now.xx+movex[road[t]]*i,now.yy+movey[road[t]]*i,now.t+1});
}
else break;
i++;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<maps[i][j];
}
cout<<endl;
}
return 0;
}