#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define int long long
#define ri register int
#define rd(n) n=read()
inline int read(void)
{
register int res=0,f=0;
register char c=getchar();
while(c<'0'||c>'9'){f^=(c=='-');c=getchar();}
while(c>='0'&&c<='9'){res=(res<<3)+(res<<1)+(c^48);c=getchar();}
return f?-res:res;
}
inline void fprint(int n)
{
if(n<0){putchar('-');n=-n;}
if(n>9) fprint(n/10);
putchar(n%10+'0');
}
inline void print(int n)
{
fprint(n);
putchar('\n');
}
const int N=1000002;
int n,m,k,x,y,z,res,ret,l,r,ans,tot,cnt;
char s[60][60];
int sx,sy;
char op[15];
int a[10006];
bool vis[52][52][1002];
inline bool check(int x,int y)
{
if(x<1||x>n||y<1||y>m||s[x][y]=='X') return 0;
return 1;
}
void dfs(int dep,int x,int y)
{
if(vis[x][y][dep]) return;
if(check(x,y)==0) return;
if(dep==k+1)
{
s[x][y]='*';
return;
}
vis[x][y][dep]=1;
if(a[dep]==1)
{
for(ri i=x-1;i;--i)
{
if(check(i,y)==0) break;
dfs(dep+1,i,y);
}
return;
}
if(a[dep]==2)
{
for(ri i=y+1;i<=m;++i)
{
if(check(x,i)==0) break;
dfs(dep+1,x,i);
}
return;
}
if(a[dep]==3)
{
for(ri i=x+1;i<=n;++i)
{
if(check(i,y)==0) break;
dfs(dep+1,i,y);
}
return;
}
if(a[dep]==4)
{
for(ri i=y-1;i;--i)
{
if(check(x,i)==0) break;
dfs(dep+1,x,i);
}
return;
}
}
signed main(void)
{
rd(n); rd(m);
for(ri i=1;i<=n;++i)
{
scanf("%s",s[i]+1);
for(ri j=1;j<=m;++j)
{
if(s[i][j]=='*')
{
sx=i;
sy=j;
}
}
}
rd(k);
for(ri i=1;i<=k;++i)
{
scanf("%s",op);
if(op[0]=='N') a[i]=1;
if(op[0]=='E') a[i]=2;
if(op[0]=='S') a[i]=3;
if(op[0]=='W') a[i]=4;
}
dfs(1,sx,sy);
s[sx][sy]='.';
for(ri i=1;i<=n;++i)
{
for(ri j=1;j<=m;++j)
putchar(s[i][j]);
puts("");
}
return 0;
}