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
#include <bits/stdc++.h>
#define MAX_N 507
using namespace std;

string tab[MAX_N];

void Ustaw1(int n, int m){
	int teraz;
	for(int i = 0; i < n; i++){
		teraz = 0;
		for(int j = 0; j < m; j++){
			if(tab[i][j] == 'B' || tab[i][j] == 'C'){
				tab[i][teraz] = tab[i][j];
				if(teraz != j) tab[i][j] = '.';
				teraz++;
			} 
		}
	}
}

void Ustaw2(int n, int m){
	int teraz;
	for(int j = 0; j < m; j++){
		teraz = 0;
		for(int i = 0; i < n; i++){
			if(tab[i][j] == 'B' || tab[i][j] == 'C'){
				tab[teraz][j] = tab[i][j];
				if(teraz != i) tab[i][j] = '.';
				teraz++;
			} 
		}
	}
}

void Ustaw3(int n, int m){
	int teraz;
	for(int i = 0; i < n; i++){
		teraz = m-1;
		for(int j = m-1; j >= 0; j--){
			if(tab[i][j] == 'B' || tab[i][j] == 'C'){
				tab[i][teraz] = tab[i][j];
				if(teraz != j) tab[i][j] = '.';
				teraz--;
			} 
		}
	}
}

void Ustaw4(int n, int m){
	int teraz;
	for(int j = 0; j < m; j++){
		teraz = n-1;
		for(int i = n-1; i >= 0; i--){
			if(tab[i][j] == 'B' || tab[i][j] == 'C'){
				tab[teraz][j] = tab[i][j];
				if(teraz != i) tab[i][j] = '.';
				teraz--;
			} 
		}
	}
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n, m;
	cin >> n >> m;
	for(int i = 0; i < n; i++) cin >> tab[i];
	int k;
	cin >> k;
	string s;
	cin >> s;
	for(int i = 0; i < k; i++){
		switch(s[i]){
			case 'G':
				Ustaw2(n, m);
				break;
			case 'D':
				Ustaw4(n, m);
				break;
			case 'L':
				Ustaw1(n, m);
				break;
			case 'P':
				Ustaw3(n, m);
				break;
		}
	}
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++) cout << tab[i][j];
		cout << '\n';
	}
}