1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <bits/stdc++.h>
using namespace std;
const int MX=500100;
int n,w,m,q,i,j,cnt,a[505][505],sva[505][505],p[MX],ans[MX];
char s[505][505],c[MX],ch[MX];
bool u[MX];
void performG() {
  for (int j=0; j<w; j++) for (int i=0, lst=0; i<n; i++) {
    if (a[i][j]) a[lst++][j]=a[i][j];
    if (lst<=i) a[i][j]=0;
  }
}
void performD() {
  for (int j=0; j<w; j++) for (int i=n-1, lst=n-1; i>=0; i--) {
    if (a[i][j]) a[lst--][j]=a[i][j];
    if (lst>=i) a[i][j]=0;
  }
}
void performL() {
  for (int i=0; i<n; i++) for (int j=0, lst=0; j<w; j++) {
    if (a[i][j]) a[i][lst++]=a[i][j];
    if (lst<=j) a[i][j]=0;
  }
}
void performP() {
  for (int i=0; i<n; i++) for (int j=w-1, lst=w-1; j>=0; j--) {
    if (a[i][j]) a[i][lst--]=a[i][j];
    if (lst>=j) a[i][j]=0;
  }
}
int main() {
  scanf("%d%d",&n,&w);
  for (i=0; i<n; i++) {
    scanf("%s",s[i]);
    for (j=0; j<w; j++) if (s[i][j]!='.') {
      a[i][j]=++cnt;
      ch[cnt]=s[i][j];
    }
  }
  scanf("%d",&q);
  scanf("%s",c);
  for (m=0, i=1; i<q; i++) if (c[i]!=c[m]) {
    c[++m]=c[i];
    while (m>0) {
      if (c[m]=='L') {
        if (c[m-1]=='P') c[--m]='L';
      } else if (c[m]=='P') {
        if (c[m-1]=='L') c[--m]='P';
      } else if (c[m]=='G') {
        if (c[m-1]=='D') c[--m]='G';
      } else if (c[m]=='D') {
        if (c[m-1]=='G') c[--m]='D';
      }
      if (m>0 && c[m-2]==c[m]) --m; else break;
    }
    //for (int j=0; j<=m; j++) putchar(c[j]); 
    //putchar('\n');
  }
  //c[m+1]=0;
  //puts(c);
  for (i=0; i<=m && i<=7; i++) {
    if (c[i]=='G') performG();
    if (c[i]=='D') performD();
    if (c[i]=='L') performL();
    if (c[i]=='P') performP();
    {
    //for (int i=0; i<n; i++,puts("")) for (int j=0; j<w; j++) if (a[i][j]==0) putchar(' '); else printf("%d",a[i][j]);
    //puts("");
    }
    if (i==3) for (int i=0; i<n; i++) for (int j=0; j<w; j++) sva[i][j]=a[i][j];
    if (i==7) for (int i=0; i<n; i++) for (int j=0; j<w; j++) if (a[i][j]) p[sva[i][j]]=a[i][j];
  }
  //if needed : perm * (m+1)/4 - ?; + //rest
  //if (i>m) print
  if (i<=m) {
    int tot=(m-3)/4;
    if (tot>1) {
      for (i=1; i<=cnt; i++) if (!u[i]) {
        vector<int> cp;
        for (j=i; !u[j]; j=p[j]) {
          cp.push_back(j);
          u[j]=true;
        }
        for (j=0; j<cp.size(); j++) ans[cp[j]]=cp[(j+tot)%int(cp.size())];
      }
      for (int i=0; i<n; i++) for (int j=0; j<w; j++) if (a[i][j]) a[i][j]=ans[sva[i][j]];
    }
    for (i=m; i%4!=3; i--);
    for (++i; i<=m; ++i) {
      if (c[i]=='G') performG();
      if (c[i]=='D') performD();
      if (c[i]=='L') performL();
      if (c[i]=='P') performP();
    }
  }
  for (i=0; i<n; i++,puts("")) for (j=0; j<w; j++) if (a[i][j]==0) putchar('.'); else putchar(ch[a[i][j]]);
  return 0;
}