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
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

char inp[2002][2002];

struct dane{
  int suma;
  char znak;
  int pol;
};

struct out{
  char typ;
  int i;
  char kolor;
};

bool comp(dane x, dane y){
  return (y.suma < x.suma);
}

int tab[26];

vector<dane>R;
vector<dane>K;
vector<out>wynik;

int Rk[2002][26];
int Kk[2002][26];

int main(){
  int n,m;
  string a;
  cin>>n>>m;
  for(int i=0;i<=n;i++){
    for(int j=0;j<26;j++)Rk[i][j]=m;
  }
  for(int j=0;j<=m;j++){
    for(int i=0;i<26;i++) Kk[j][i]=n;
  }
  for(int i=0;i<n;i++){
    cin>>a;
    for(int j=0;j<m;j++) inp[i][j]=a[j];
  }
  for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      tab[inp[i][j]-'A']++;
    }
    for(int j=0;j<26;j++){
      if(tab[j]>0){
        dane temp={tab[j],j+'A',i};
        R.push_back(temp);
      }
    }
    for(int j=0;j<26;j++)tab[j]=0;
  }
  for(int j=0;j<m;j++){
    for(int i=0;i<n;i++){
      tab[inp[i][j]-'A']++;
    }
    for(int i=0;i<26;i++){
      if(tab[i]>0){
        dane temp={tab[i],i+'A',j};
        K.push_back(temp);
      }
    }
    for(int i=0;i<26;i++)tab[i]=0;
  }//cout<<"h";
  sort(R.begin(), R.end(), comp);
  sort(K.begin(), K.end(), comp);
 // cout<<"h";
 int si=-1, sj=-1;
  for(int i=0,j=0;;){;
    if(i<R.size()&&R[i].suma>=Rk[R[i].pol][R[i].znak-'A']){
      out temp={'R', R[i].pol, R[i].znak};
      wynik.push_back(temp);
      for(int l=0;l<=m;l++){
        for(int t=0;t<26;t++){
          if(R[i].znak-'A'!=t)Kk[l][t]--;
        }
      }
      i++;
    }
    if(j<K.size()&&K[j].suma>=Kk[K[j].pol][R[j].znak-'A']){
      out temp={'K', K[j].pol, K[j].znak};
      wynik.push_back(temp);
      for(int l=0;l<=n;l++){
        for(int t=0;t<26;t++)
          if(K[j].znak-'A'!=t)Rk[l][t]--;
      }
      j++;
    }
    if(i>=R.size()&&j>=K.size())break;
    if(i==si&&j==sj){
      R.push_back(R[i]);
      K.push_back(K[j]);
      i++,j++;
    }
    si=i, sj=j;
  }
  cout<<wynik.size()<<"\n";
  for(int i=wynik.size()-1;i>=0;i--){
    cout<<wynik[i].typ<<" "<<wynik[i].i+1<<" "<<wynik[i].kolor<<"\n";
  }
}