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
#include<bits/stdc++.h>
using namespace std;
char arr[500][501];
void D(int n,int m){
	int i,j,k;
	for(j=0;j<m;j++){
		k=n-1;
		for(i=n-1;i>=0;i--)
			if(arr[i][j]!='.'){
				swap(arr[k][j],arr[i][j]);
				k--;
			}
	}
}
void G(int n,int m){
	reverse(arr,arr+n);
	D(n,m);
	reverse(arr,arr+n);
}
void P(int n,int m){
	int i,j,k;
	for(i=0;i<n;i++){
		k=m-1;
		for(j=m-1;j>=0;j--)
			if(arr[i][j]!='.'){
				swap(arr[i][k],arr[i][j]);
				k--;
			}
	}
}
void L(int n,int m){
	int i;
	for(i=0;i<n;i++)
		reverse(arr[i],arr[i]+m);
	P(n,m);
	for(i=0;i<n;i++)
		reverse(arr[i],arr[i]+m);
}
int main(){
	int n,m,k,i,k1;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
		scanf("%s",arr[i]);
	scanf("%d",&k);
	char operacje[k+1];
	char s[k+1];
	scanf("%s",operacje);
	k1=-1;
	for(i=0;i<k;i++){
		if(k1==-1){
			s[++k1]=operacje[i];
			continue;
		}
		if(operacje[i]==s[k1])
			continue;
		if(operacje[i]=='D' || operacje[i]=='G')
			if(s[k1]=='D' || s[k1]=='G'){
				s[k1]=operacje[i];
				continue;
			}
		if(operacje[i]=='L' || operacje[i]=='P')
			if(s[k1]=='L' || s[k1]=='P'){
				s[k1]=operacje[i];
				continue;
			}
		if(k1==0 || s[k1-1]!=operacje[i])
			s[++k1]=operacje[i];
	}
	k1++;
	for(i=0;i<k1%12;i++){
		if(s[i]=='D')
			D(n,m);
		if(s[i]=='G')
			G(n,m);
		if(s[i]=='L')
			L(n,m);
		if(s[i]=='P')
			P(n,m);
		//~ for(int i1=0;i1<n;i1++)
			//~ printf("%s\n",arr[i1]);
	}
	for(i=0;i<n;i++)
		printf("%s\n",arr[i]);
	return 0;
}