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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
vector<pair<bool, pair<int, char>>> ans;
char tab[2005][2005];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int N, M;
    cin >> N >> M;
    for (int i=0; i<N; i++){
        for (int j=0; j<M; j++){
            cin >> tab[i][j];
        }
    }
    if (N==1 && M==1){
        char zn=tab[0][0];
        cout << "R" << " ";
        cout << "1" << " " << zn << "\n";
        return 0;
    }
    int npp=0, mpp=0, iwr=0, iwk=0;
    for (int i=0; i<N; i++){
        for (int j=1; j<M; j++){
            if (tab[i][j]!=tab[i][j-1]) break;
            if (j==M-1) iwr++;
        }
    }
    for (int i=0; i<M; i++){
        for (int j=1; j<N; j++){
            if (tab[j][i]!=tab[j-1][i]) break;
            if (j==N-1) iwk++;
        }
    }
    if (iwr>=iwk) {
        while (true) {
            int nn = N - 1;
            for (int i = N - 1; i >= npp; i--) {
                char ostw = '0';
                int st = 0;
                for (int j = mpp; j < M; j++) {
                    if (tab[i][j] != '0') {
                        ostw = tab[i][j];
                        st = j;
                        break;
                    }
                }
                if (ostw == '0') {
                    if (i == npp) npp++;
                    continue;
                }
                for (int j = st; j < M; j++) {
                    if (tab[i][j] != ostw && tab[i][j] != '0') break;
                    if (j == M - 1) {
                        if (nn == i) nn--;
                        ans.push_back({0, {i, ostw}});
                        for (int k = mpp; k < M; k++) tab[i][k] = '0';
                    }
                }
            }
            N = nn + 1;
            if (M==mpp || N==npp) break;
            if (N - npp == 1 && M - mpp == 1) {
                char zn;
                int zap;
                for (int i = npp; i < N; i++) {
                    for (int j = mpp; j < M; j++) {
                        if (tab[i][j] != '0') {
                            zn = tab[i][j];
                            zap = i;
                            break;
                        }
                    }
                }
                bool pj = true;
                ans.push_back({pj, {zap, zn}});
                break;
            }
            int nm = M - 1;
            bool kon = false;
            for (int i = M - 1; i >= mpp; i--) {
                char ostw = '0';
                int st = 0;
                for (int j = npp; j < N; j++) {
                    if (tab[j][i] != '0') {
                        ostw = tab[j][i];
                        st = j;
                        break;
                    }
                }
                if (ostw == '0') {
                    if (i == mpp) mpp++;
                    continue;
                }
                for (int j = st; j < N; j++) {
                    if (tab[j][i] != ostw && tab[j][i] != '0') {
                        kon = true;
                        break;
                    }
                    if (j == N - 1) {
                        if (i == nm) nm--;
                        ans.push_back({1, {i, ostw}});
                        for (int k = npp; k < N; k++) tab[k][i] = '0';
                    }
                }
            }
            M = nm + 1;
            if (M==mpp || N==npp) break;
            if (N - npp == 1 && M - mpp == 1) {
                char zn;
                int zap;
                for (int i = npp; i < N; i++) {
                    for (int j = mpp; j < M; j++) {
                        if (tab[i][j] != '0') {
                            zn = tab[i][j];
                            zap = i;
                            break;
                        }
                    }
                }
                bool pj = true;
                ans.push_back({pj, {zap, zn}});
                break;
            }
            if (!kon) break;
        }
    }
    else {
        while (true) {
            int nm = M - 1;
            for (int i = M - 1; i >= mpp; i--) {
                char ostw = '0';
                int st = 0;
                for (int j = npp; j < N; j++) {
                    if (tab[j][i] != '0') {
                        ostw = tab[j][i];
                        st = j;
                        break;
                    }
                }
                if (ostw == '0') {
                    if (i == mpp) mpp++;
                    continue;
                }
                for (int j = st; j < N; j++) {
                    if (tab[j][i] != ostw && tab[j][i] != '0') break;
                    if (j == N - 1) {
                        if (i == nm) nm--;
                        ans.push_back({1, {i, ostw}});
                        for (int k = npp; k < N; k++) tab[k][i] = '0';
                    }
                }
            }
            M = nm + 1;
            if (M==mpp || N==npp) break;
            if (N - npp == 1 && M - mpp == 1) {
                char zn;
                int zap;
                for (int i = npp; i < N; i++) {
                    for (int j = mpp; j < M; j++) {
                        if (tab[i][j] != '0') {
                            zn = tab[i][j];
                            zap = i;
                            break;
                        }
                    }
                }
                bool pj = true;
                ans.push_back({pj, {zap, zn}});
                break;
            }

            int nn = N - 1;
            bool kon=false;
            for (int i = N - 1; i >= npp; i--) {
                char ostw = '0';
                int st = 0;
                for (int j = mpp; j < M; j++) {
                    if (tab[i][j] != '0') {
                        ostw = tab[i][j];
                        st = j;
                        break;
                    }
                }
                if (ostw == '0') {
                    if (i == npp) npp++;
                    continue;
                }
                for (int j = st; j < M; j++) {
                    if (tab[i][j] != ostw && tab[i][j] != '0'){
                        kon=true;
                        break;
                    }
                    if (j == M - 1) {
                        if (nn == i) nn--;
                        ans.push_back({0, {i, ostw}});
                        for (int k = mpp; k < M; k++) tab[i][k] = '0';
                    }
                }
            }
            N = nn + 1;
            if (M==mpp || N==npp) break;
            if (N - npp == 1 && M - mpp == 1) {
                char zn;
                int zap;
                for (int i = npp; i < N; i++) {
                    for (int j = mpp; j < M; j++) {
                        if (tab[i][j] != '0') {
                            zn = tab[i][j];
                            zap = i;
                            break;
                        }
                    }
                }
                bool pj = true;
                ans.push_back({pj, {zap, zn}});
                break;
            }
            if (!kon) break;
        }
    }
    cout << ans.size() << "\n";
    for (int i=ans.size()-1; i>=0; i--){
        if (ans[i].f) cout << "K" << " ";
        else cout << "R" << " ";
        cout << ans[i].s.f+1 << " " << ans[i].s.s << "\n";
    }
    return 0;
}