#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i = a; i < b;++i)
#define pb emplace_back
#define mp make_pair
#define f first
#define s second
using namespace std;
int vis[2005],vis1[2005],tab[2005][2005];
int main(){
// cin.tie(0);
// ios_base::sync_with_stdio(0);
int n,m;
cin>>n >>m;
int wier[n + 1][27],kol[m + 1][27];
FOR(i,0,n + 1){
FOR(j,0,27){
wier[i][j] = 0;
}
}
FOR(i,0,m + 1){
FOR(j,0,27){
kol[i][j] = 0;
}
}
FOR(i,0,n){
string W;
cin>>W;
FOR(j,0,W.size()){
++wier[i][W[j] - 'A'];
++kol[j][W[j] - 'A'];
tab[i][j] = W[j] - 'A';
}
}
vector<pair<int,pair<int,int>>> ans;
int cnt = 0;
while(cnt != n + m){
// cout<<cnt <<" " <<"\n";
FOR(j,0,n){
if(vis[j] == 0){
int suma = 0,z = 0;
FOR(k,0,27){
if(wier[j][k] != 0){
++suma;
z = k;
}
}
if(suma == 1){
++cnt;
vis[j] = 1;
FOR(k,0,m){
--kol[k][tab[j][k]];
}
ans.pb(mp(1,mp(j,z)));
}
if(suma == 0){
++cnt;
vis[j] = 1;
}
}
}
if(cnt != n + m){
FOR(j,0,m){
if(vis1[j] == 0){
int suma = 0,z = 0;
FOR(k,0,27){
if(kol[j][k] != 0){
++suma;
z = k;
}
}
if(suma == 1){
++cnt;
vis1[j] = 1;
FOR(k,0,n){
--wier[k][tab[k][j]];
}
ans.pb(mp(2,mp(j,z)));
}
if(suma == 0){
++cnt;
vis1[j] = 1;
}
}
}
}
}
reverse(ans.begin(),ans.end());
cout<<ans.size() <<"\n";
for(auto &y : ans){
if(y.f == 1){
cout<<"R" <<" ";
}else{
cout<<"K" <<" ";
}
char k = 'A' + y.s.s;
cout<<y.s.f + 1 <<" " <<k <<"\n";
}
}
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 | #include <bits/stdc++.h> #define FOR(i,a,b) for(int i = a; i < b;++i) #define pb emplace_back #define mp make_pair #define f first #define s second using namespace std; int vis[2005],vis1[2005],tab[2005][2005]; int main(){ // cin.tie(0); // ios_base::sync_with_stdio(0); int n,m; cin>>n >>m; int wier[n + 1][27],kol[m + 1][27]; FOR(i,0,n + 1){ FOR(j,0,27){ wier[i][j] = 0; } } FOR(i,0,m + 1){ FOR(j,0,27){ kol[i][j] = 0; } } FOR(i,0,n){ string W; cin>>W; FOR(j,0,W.size()){ ++wier[i][W[j] - 'A']; ++kol[j][W[j] - 'A']; tab[i][j] = W[j] - 'A'; } } vector<pair<int,pair<int,int>>> ans; int cnt = 0; while(cnt != n + m){ // cout<<cnt <<" " <<"\n"; FOR(j,0,n){ if(vis[j] == 0){ int suma = 0,z = 0; FOR(k,0,27){ if(wier[j][k] != 0){ ++suma; z = k; } } if(suma == 1){ ++cnt; vis[j] = 1; FOR(k,0,m){ --kol[k][tab[j][k]]; } ans.pb(mp(1,mp(j,z))); } if(suma == 0){ ++cnt; vis[j] = 1; } } } if(cnt != n + m){ FOR(j,0,m){ if(vis1[j] == 0){ int suma = 0,z = 0; FOR(k,0,27){ if(kol[j][k] != 0){ ++suma; z = k; } } if(suma == 1){ ++cnt; vis1[j] = 1; FOR(k,0,n){ --wier[k][tab[k][j]]; } ans.pb(mp(2,mp(j,z))); } if(suma == 0){ ++cnt; vis1[j] = 1; } } } } } reverse(ans.begin(),ans.end()); cout<<ans.size() <<"\n"; for(auto &y : ans){ if(y.f == 1){ cout<<"R" <<" "; }else{ cout<<"K" <<" "; } char k = 'A' + y.s.s; cout<<y.s.f + 1 <<" " <<k <<"\n"; } } |
English