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
#include<bits/stdc++.h>

using namespace std;

const int N = 2000 + 5;

class info{
public:
	int p, x;
	inline info() {}
	inline info(int p0, int x0){
		p = p0, x = x0;
	}
};

int n = 0, m = 0;
int r[N][30] = {}, k[N][30] = {}, R[N] = {}, K[N] = {};
char str[N] = {};
queue<info> Q;

inline void work(){
	if(!Q.size()) return;
	info bag = Q.front(); Q.pop();
	if(bag.p){
		int j = bag.x, w = -1;
		for(int c = 0 ; c < 26 ; c ++) if(k[j][c]) w = c;
		for(int i = 0 ; i < n ; i ++) if(R[i] > 1){
			r[i][w] --;
			if(!r[i][w]){
				R[i] --;
				if(R[i] == 1) Q.push(info(0, i));
			}
		}
		work();
		printf("K %d %c\n", j + 1, char('A' + w));
		
	}
	else{
		int i = bag.x, w = -1;
		for(int c = 0 ; c < 26 ; c ++) if(r[i][c]) w = c;
		for(int j = 0 ; j < m ; j ++) if(K[j] > 1){
			k[j][w] --;
			if(!k[j][w]){
				K[j] --;
				if(K[j] == 1) Q.push(info(1, j));
			}
		}
		work();
		printf("R %d %c\n", i + 1, char('A' + w));
	}
}

int main(){
	scanf("%d %d", &n, &m);
	for(int i = 0 ; i < n ; i ++){
		scanf("%s", str);
		for(int j = 0 ; j < m ; j ++){
			int c = str[j] - 'A';
			r[i][c] ++, k[j][c] ++;
		}
	}
	for(int i = 0 ; i < n ; i ++) for(int c = 0 ; c < 26 ; c ++) if(r[i][c]) R[i] ++;
	for(int j = 0 ; j < m ; j ++) for(int c = 0 ; c < 26 ; c ++) if(k[j][c]) K[j] ++;
	for(int i = 0 ; i < n ; i ++) if(R[i] == 1) Q.push(info(0, i));
	for(int j = 0 ; j < m ; j ++) if(K[j] == 1) Q.push(info(1, j));
	printf("%d\n", n + m);
	work();
	return 0;
}