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
// Karol Kosinski 2024
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a),_b=(b);i<_b;++i)
#define FR_(i,a,b) for(int i=(a),_b=(b);i<=_b;++i)
#define FD_(i,b,a) for(int i=(b),_a=(a);i>=_a;--i)
#define ALL(c) (c).begin(),(c).end()
#define SIZE(c) int((c).size())
#define X first
#define Y second
#define endl '\n'
#define NAM(x) #x,'=',x
using namespace std;
using LL = long long;
using ULL = unsigned long long;
using PII = pair<int, int>;
using TIII = tuple<int, int, int>;
template<class...T> void _cout(T...a){(cout<<...<<a);}

#ifndef ENABLE_DEBUG
#define DEB(k,p,f,x...)
#else
#define DEB(k,p,f,x...) {if(k)_cout("------",setw(4),__LINE__," : ",__FUNCTION__,endl);if(p)f(x);}
#endif
#define DEBF(f,x...)    DEB(1,1,f,x)
#define DEBL            DEBF(void,0)
#define DEBC(p,x...)    DEB(0,p,_cout,x)
#define DEBUG(x...)     DEBC(1,x)

constexpr int NX = 2'005;
constexpr int AX = 26;

struct Line
{
    char rc, sgn;
    int num;
};

int n, m;
string T[NX];
int LR[NX], LC[NX], R[NX][AX], C[NX][AX];
vector<Line> L;

void testcase()
{
    cin >> n >> m;
    FOR(i,0,n) cin >> T[i];

    FOR(i,0,n)
    {
        FOR(j,0,m)
        {
            int v = T[i][j] - 'A';
            if ( R[i][v] == 0 ) ++ LR[i];
            ++ R[i][v];
            if ( C[j][v] == 0 ) ++ LC[j];
            ++ C[j][v];
        }
    }

    queue<PII> Q;
    FOR(i,0,n)
    {
        DEBUG( NAM(i), " ", NAM(LR[i]), endl );
        if ( LR[i] == 1 ) Q.emplace(0, i);
    }
    FOR(j,0,m)
    {
        DEBUG( NAM(j), " ", NAM(LC[j]), endl );
        if ( LC[j] == 1 ) Q.emplace(1, j);
    }

    while ( not Q.empty() )
    {
        auto& [val, ind] = Q.front(); Q.pop();
        char letter = 0;
        if ( val == 0 )
        {
            FOR(j,0,m) if ( char& cur = T[ind][j]; cur != 0 ) {
                letter = cur;
                int v = cur - 'A';
                cur = 0;
                -- C[j][v];
                if ( C[j][v] == 0 )
                {
                    -- LC[j];
                    if ( LC[j] == 1 ) Q.emplace(1, j);
                }
            }
        }
        else
        {
            FOR(i,0,n) if ( char& cur = T[i][ind]; cur != 0 ) {
                letter = cur;
                int v = cur - 'A';
                cur = 0;
                -- R[i][v];
                if ( R[i][v] == 0 )
                {
                    -- LR[i];
                    if ( LR[i] == 1 ) Q.emplace(0, i);
                }
            }
        }
        if ( letter == 0 ) break;
        L.push_back( Line{ ( val == 0 ) ? 'R' : 'K', letter, ind + 1 } );
    }
    reverse( ALL(L) );
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    testcase();
    cout << L.size() << endl;
    for ( auto& it : L ) cout << it.rc << ' ' << it.num << ' ' << it.sgn << endl;
    return 0;
}