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 <cstdio>
#include <queue>

using namespace std;

int n, m, dn, dm;
int gra[2010][2010];
int kol[2010][30];
int wie[2010][30];

queue<pair<int, int> > q_kol;
queue<pair<int, int> > q_wie;
vector<pair<int, int> > res;
vector<bool> leniwy;

bool b_kol[2010];
bool b_wie[2010];

int main()
{
    scanf("%d %d", &n, &m);

    dn = n;
    dm = m;

    for(int i = 0; i < n; i++)
    {
        char linia[m];
        scanf("%s", linia);

        for(int j = 0; j < m; j++)
        {
            int ele = linia[j] - 'A';
            gra[i][j] = ele;
            wie[i][ele]++;
            kol[j][ele]++;
        }
    }

    while(true)
    {
        while(!q_wie.empty())
        {
            pair<int, int> w_i = q_wie.front();
            q_wie.pop();
            res.push_back(w_i);
            leniwy.push_back(0);
            b_wie[w_i.first] = 1;
            dn--;

            for(int j = 0; j < m; j++) if(!b_kol[j]) kol[j][w_i.second]--;
        }

        if(dn == 0) break;

        for(int j = 0; j < m; j++)
        {
            if(b_kol[j]) continue;

            for(int c = 0; c < 'Z' - 'A' + 1; c++) if(kol[j][c] == dn) q_kol.push(make_pair(j, c));
        }

        while(!q_kol.empty())
        {
            pair<int, char> k_j = q_kol.front();
            q_kol.pop();
            res.push_back(k_j);
            leniwy.push_back(1);
            b_kol[k_j.first] = 1;
            dm--;

            for(int i = 0; i < n; i++) if(!b_wie[i]) wie[i][k_j.second]--;
        }

        if(dm == 0) break;

        for(int i = 0; i < n; i++)
        {
            if(b_wie[i]) continue;

            for(int c = 0; c < 'Z' - 'A' + 1; c++) if(wie[i][c] == dm) q_wie.push(make_pair(i, c));
        }
    }

    printf("%d\n", res.size());

    for(int i = res.size() - 1; i >= 0; i--)
    {
        if(leniwy[i]) printf("K %d %c\n", res[i].first + 1, res[i].second + 'A');
        else printf("R %d %c\n", res[i].first + 1, res[i].second + 'A');
    }

    return 0;
}