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>
using namespace std;
int ile_poziom[2007][33];
int ile_pion[2007][33];
bool uzyte_poziom[2007];
bool uzyte_pion[2007];
int dowolne_poziom[2007];
int dowolne_pion[2007];
char plansza[2007][2007];
pair <int, char> wyniki[4007];
int wsk = 0;
int dowolne = 0;
int n, m;
void znajdz_pelne() {
    char znak;
    for (int i = 0; i < n; ++i) {
        if (uzyte_poziom[i] == true) {
            continue;
        }
        for (int j = 0; j <= 26; ++j) {
            if (ile_poziom[i][j] + dowolne_poziom[i] == m) {
                //cout << "POZIOM: " << i << "\n";
                uzyte_poziom[i] = true;
                znak = (char)(j + 'A');
                wyniki[wsk] = { i + 1, znak };
                wsk++;
                for (int k = 0; k < m; ++k) {
                    if (plansza[i][k] != 30) {
                        ile_pion[k][plansza[i][k] - 'A']--;
                        dowolne_pion[k]++;
                        dowolne++;
                    }
                    plansza[i][k] = char(30);
                }
                return;
            }
        }
    }
    for (int i = 0; i < m; ++i) {
        if (uzyte_pion[i] == true) {
            continue;
        }
        for (int j = 0; j <= 26; ++j) {
            if (ile_pion[i][j] + dowolne_pion[i] == n) {
                //cout << "PION: " << i << "\n";
                /*if (i == 1){
                    if (1 == 1){

                    }
                }*/
                uzyte_pion[i] = true;
                znak = (char)(j + 'A');
                wyniki[wsk] = { -(i + 1), znak };
                wsk++;
                for (int k = 0; k < n; ++k) {
                    if (plansza[k][i] != 30) {
                        ile_poziom[k][plansza[k][i] - 'A']--;
                        dowolne++;
                        dowolne_poziom[k]++;
                    }
                    plansza[k][i] = char(30);
                }
                return;
            }
        }
    }
    //cout << "NIE ZNALEZIONO\n";
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cin >> plansza[i][j];
            ile_poziom[i][(int)(plansza[i][j] - 'A')]++;
            ile_pion[j][(int)(plansza[i][j] - 'A')]++;
        }
    }
    while (dowolne != (n * m)) {
        znajdz_pelne();
    }
    cout << wsk << "\n";
    for (int i = wsk - 1; i >= 0; --i) {
        if (wyniki[i].first < 0) {
            cout << 'K' << " ";
        }
        else {
            cout << 'R' << " ";
        }
        cout << abs(wyniki[i].first) << " ";
        cout << wyniki[i].second << "\n";
    }
}