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
#include <bits/stdc++.h>
#define ll long long
#define fast ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define pll pair<ll, ll>
using namespace std;
struct akcja{
    int color,idx;
    bool type;
};
const int N = 2e3+1;
char tab[N][N];
int cnt[N][26][2],dlugosc[N][2],n,m,ile[N][2];
bool tagged[N][2];
char xd[] = {'R','K'};
unordered_set<int>literki[N][2];
int main(){
    fast
    cin >> n >> m;
    for(int i = 1;i <= n;i++){
        dlugosc[i][0] = m;
        for(int j = 1;j <= m;j++){
            dlugosc[i][1] = n;
            cin >> tab[i][j];
            cnt[i][tab[i][j] - 'A'][0]++;
            cnt[j][tab[i][j] - 'A'][1]++;
            if(cnt[i][tab[i][j] - 'A'][0] == 1){
                ile[i][0]++;
                literki[i][0].insert(tab[i][j] - 'A');
            }
            if(cnt[j][tab[i][j] - 'A'][1] == 1){
                ile[j][1]++;
                literki[j][1].insert(tab[i][j] - 'A');
            }
        }
    }
    queue<akcja> paski;
    for(int i = 1;i <= n;i++)
        if(ile[i][0] == 1)
            for(auto a: literki[i][0]){
                paski.push({a,i,0});
                break;
            }


    if(paski.empty())
        for(int i = 1;i <= m;i++)
            if(ile[i][1] == 1)
            for(auto a: literki[i][1]){
                paski.push({a,i,1});
            }

    vector<akcja> res;
    while(!paski.empty()){
        akcja p = paski.front();
        paski.pop();
        tagged[p.idx][p.type] = 1;
        res.pb(p);
        int x;
        if(!p.type)x = m;
        else x = n;
        for(int i = 1;i <= x;i++){
            if(tagged[i][!p.type])continue;
            if(!p.type){
               cnt[i][tab[p.idx][i] - 'A'][!p.type]--;
               if(cnt[i][tab[p.idx][i] - 'A'][!p.type] == 0){
                    ile[i][!p.type]--;
                    literki[i][!p.type].erase(tab[p.idx][i] - 'A');
               }

            }

            else{
                cnt[i][tab[i][p.idx] - 'A'][!p.type]--;
                if(cnt[i][tab[i][p.idx] - 'A'][!p.type] == 0){
                    ile[i][!p.type]--;
                    literki[i][!p.type].erase(tab[i][p.idx] - 'A');
                }

            }
            if(ile[i][!p.type] == 1){
                for(auto a:literki[i][!p.type]){
                    paski.push({a,i,!p.type});
                    tagged[i][!p.type] = 1;
                    break;
                }
            }
        }
    }
    reverse(res.begin(),res.end());
    cout << res.size() << "\n";
    for(auto p: res)
        cout << xd[p.type] << " " << p.idx << " " << (char)((char)p.color + 'A') << "\n";
}
/*
4 6
FAXAZA
FFXXZZ
FXXXZA
FXXXZZ

*/