#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
const int SIZE=2005;
int tab[SIZE][SIZE];
bool V[SIZE][2];
int N,M;
int sum;
int suw;
int suk;
int d;
int Z;
pair<bool,int> CHECKw(int x){
Z=0;
for(int i=1;i<=M;++i){
if(!V[i][0]){
if(Z!=tab[x][i]){
if(Z){return{0,0};}
Z=tab[x][i];
}
}
}
return {1,Z};
}
pair<bool,int> CHECKk(int x){
Z=0;
for(int i=1;i<=N;++i){
if(!V[i][1]){
if(Z!=tab[i][x]){
if(Z){return{0,0};}
Z=tab[i][x];
}
}
}
return {1,Z};
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string t;
cin>>N>>M;
sum=M*N;
suw=0;
suk=0;
for(int i=1;i<=N;++i){
cin>>t;
for(int j=0;j<M;++j){
tab[i][j+1]=int(t[j]);
}
}
stack< pair<char,pair<int,int>> > Q;
pair<char,pair<int,int>> res1;
pair<bool,int> res;
int mod=1;
while(sum){
if(mod%2){
for(int i=1;i<=N;++i){
if(V[i][1]){continue;}
res=CHECKw(i);
if(res.f&&res.s){
//CLEARw(i);
sum-=M-suk;
suw++;
V[i][1]=true;
Q.push({'R',{i,res.s}});
}
}
}else{
for(int i=1;i<=M;++i){
if(V[i][0]){continue;}
res=CHECKk(i);
if(res.f&&res.s){
//CLEARk(i);
sum-=N-suw;
suk++;
V[i][0]=true;
Q.push({'K',{i,res.s}});
}
}
}
mod++;
}
d=Q.size();
cout<<d<<endl;
for(int i=0;i<d;++i){
res1=Q.top();
Q.pop();
cout<<res1.f<<' '<<res1.s.f<<' '<<char(res1.s.s)<<"\n";
}
return 0;}
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 | #include <bits/stdc++.h> #define f first #define s second using namespace std; const int SIZE=2005; int tab[SIZE][SIZE]; bool V[SIZE][2]; int N,M; int sum; int suw; int suk; int d; int Z; pair<bool,int> CHECKw(int x){ Z=0; for(int i=1;i<=M;++i){ if(!V[i][0]){ if(Z!=tab[x][i]){ if(Z){return{0,0};} Z=tab[x][i]; } } } return {1,Z}; } pair<bool,int> CHECKk(int x){ Z=0; for(int i=1;i<=N;++i){ if(!V[i][1]){ if(Z!=tab[i][x]){ if(Z){return{0,0};} Z=tab[i][x]; } } } return {1,Z}; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); string t; cin>>N>>M; sum=M*N; suw=0; suk=0; for(int i=1;i<=N;++i){ cin>>t; for(int j=0;j<M;++j){ tab[i][j+1]=int(t[j]); } } stack< pair<char,pair<int,int>> > Q; pair<char,pair<int,int>> res1; pair<bool,int> res; int mod=1; while(sum){ if(mod%2){ for(int i=1;i<=N;++i){ if(V[i][1]){continue;} res=CHECKw(i); if(res.f&&res.s){ //CLEARw(i); sum-=M-suk; suw++; V[i][1]=true; Q.push({'R',{i,res.s}}); } } }else{ for(int i=1;i<=M;++i){ if(V[i][0]){continue;} res=CHECKk(i); if(res.f&&res.s){ //CLEARk(i); sum-=N-suw; suk++; V[i][0]=true; Q.push({'K',{i,res.s}}); } } } mod++; } d=Q.size(); cout<<d<<endl; for(int i=0;i<d;++i){ res1=Q.top(); Q.pop(); cout<<res1.f<<' '<<res1.s.f<<' '<<char(res1.s.s)<<"\n"; } return 0;} |
English