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
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <iostream>
#include <algorithm>
#include <vector>

#define push push_back
#define ll long long

using namespace std;

int main() {
   ios_base::sync_with_stdio(0);
   cin.tie(0);

   int n, m;
   cin >> n >> m;

    // row, columns
   vector<vector<pair<char,int>>> K(n, vector<pair<char,int>>());
    vector<int> KC(m, 0);

   for(int i = 0; i < n; i++){
       for(int j = 0; j < m; j++) {
           char temp;
           cin >> temp;

           if(temp != '.') {
               KC[j]++;
               K[i].push_back({temp, j});
           }
       }
    }

    int k;
    cin >> k;

    string ins;
    cin >> ins;

    for(int i = 0; i < n; i++){
        cerr << KC[i] << "\n";
    }

    int loy = -1;
    int lox = -1;

    for(int i = 0; i < k; i++) {
        if(ins[i] == 'G') {
            loy = 0;
        }else if(ins[i] == 'D') {
            loy = 1;
        }else if(ins[i] == 'L') {
            lox = 0;
        }else if(ins[i] == 'P') {
            lox = 1;
        }
    }

    vector<vector<char>> fP(n, vector<char>(m, '.'));

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cerr << fP[i][j];
        }
        cerr << "\n";
    }

    int tI = 0;
    for(int i = 0; i < n; i++) {
        auto szs = K[i];
        if(szs.size() == 0) {
            continue;   
        }
        tI++;
    }

    cerr << "TI: " << tI << "\n";

    vector<int> KMC(m,0);

    int sI = 0;

    for(int i = 0; i < n; i++) {
        auto szs = K[i];
        if(szs.size() == 0) {
            sI++;
            continue;
        }

        cerr << "H: " << szs.size() << "\n";

        for(int j = 0; j < szs.size(); j++) {
            auto elp = szs[j];
            int el = elp.first;

            int cI = i - sI;

            int insIX = 0;
            int insIY = 0;

            if(lox == 0) {
                insIX = j;
            }else insIX = m-(szs.size()-j-1)-1;

            if(loy == 0){
                insIY = KMC[elp.second];
                KMC[elp.second]++;
            }else {
                insIY = n - (KC[elp.second]-1) -1;
                KC[elp.second]--;
            }

            cerr << "Change: " << (char)el << " " << insIX << " " << insIY << " | " << cI << "\n";

            fP[insIY][insIX] = el;
        }
    }

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout << fP[i][j];
        }
        cout << "\n";
    }
}