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
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e3+7;
int wzo[MAXN][MAXN];
bool vis[2*MAXN];
int t[2*MAXN][30];
queue<pair<int,int>> q;
int licznik[MAXN*2];
pair<int,int>ans[2*MAXN];
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int n,a,b,m,ur=0,uk=0,ra=0; char c; string s1;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>s1;
		for(int j=1;j<=m;j++){
			c=s1[j-1];
			wzo[i][j]=c-64;
			t[i][c-64]++; t[j+n][c-64]++;
		}
	}
	for(int i=1;i<=n+m;i++) for(int j=1;j<=26;j++) if(t[i][j]>0) licznik[i]++;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=26;j++){
			if(t[i][j]==m){
				vis[i]=1;
				q.push({i,j});
			}
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=26;j++){
			if(t[i+n][j]==n){
				vis[i+n]=1;
				q.push({i+n,j});
			}
		}
	}
	while(!q.empty()){
		a=q.front().first; b=q.front().second; q.pop();
		ans[++ra]={a,b};
		if(a>n){
			 a-=n;
			for(int i=1;i<=n;i++){
				if(vis[i]) continue;
				t[i][wzo[i][a]]--;	
				if(t[i][wzo[i][a]]==0){
					licznik[i]--;
					if(licznik[i]==1){
						for(int j=1;j<=26;j++){
							if(t[i][j]>0){
								q.push({i,j});
								vis[i]=1;
							}
						}
					}
				}
			} 
		}
		else{
			for(int i=1;i<=m;i++){
				if(vis[i+n]) continue;
				t[i+n][wzo[a][i]]--;
				if(t[i+n][wzo[a][i]]==0){
					licznik[i+n]--;
					if(licznik[i+n]==1){
						for(int j=1;j<=26;j++){
							if(t[i+n][j]>0){
								q.push({i+n,j});
								vis[i+n]=1;
							}
						}
					}
				}	
			} 
		}
	}
	cout<<ra<<'\n';
	for(int i=ra;i>=1;i--){
		if(ans[i].first>n) cout<<"K "<<ans[i].first-n;
		else cout<<"R "<<ans[i].first;
		cout<<' '<<char(64+ans[i].second)<<'\n';
	}
	return 0;
}