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
#ifdef _MSC_VER
  #ifndef __GNUC__
    #pragma warning(disable: 4996)
  #endif
  #define main main0
#endif
#include <iostream>
#include <string>
#include <vector>
using namespace std;
typedef long long           ll;
typedef unsigned long long ull;
typedef unsigned int      uint;

struct Ruch {
  Ruch() {}
  Ruch(char ki, int n, char ko): kierunek(ki), numer(n), kolor(ko) {}
  char kierunek;
  int numer;
  char kolor;
  void wypisz() { cout << kierunek << ' ' << numer << ' '  << kolor << '\n'; }
};
vector<Ruch> ruchy;
string plansza;

int sprawdz_linie(char kierunek, int n, int m) {
  int liczba = 0;
  int rozmiar = n * m;
  int i_plus = kierunek == 'R'? m: 1;
  int j_plus = kierunek == 'R'? 1: m;
  int i_max  = kierunek == 'R'? rozmiar: m;
  int j_max  = kierunek == 'R'? m: rozmiar;
  for(int i = 0; i < i_max; i += i_plus) {
    bool linia = true;
    char znak = ' ';
    int j = i;
    int j_max1 = i + j_max;
    for(; j < j_max1; j += j_plus) {
      if(plansza[j] == ' ')
        continue;
      if(znak == ' ')
        znak = plansza[j];
      else {
        if(znak == plansza[j])
          continue;
        linia = false;
        j = rozmiar;
      }
    }
    if(linia && znak != ' ') {
      if(kierunek == 'R')
        ruchy.push_back(Ruch('R', i / m + 1, znak));
      else
        ruchy.push_back(Ruch('K', i + 1, znak));
      for(j = i; j < j_max1; j += j_plus) {
        if(plansza[j] != ' ') {
          plansza[j] = ' ';
          ++liczba;
        }
      }
    }
  }
  return liczba;
}


int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(NULL);

  int n, m;
  cin >> n >> m;
  int liczba = n * m;
  for(int i = 0; i < n; ++i) {
    string linia;
    cin >> linia;
    plansza.append(linia);
  }
  while(liczba > 0) {
    liczba -= sprawdz_linie('R', n, m);
    liczba -= sprawdz_linie('K', n, m);
  }
  cout << ruchy.size() << '\n';
  for(int i = ruchy.size() - 1; i >= 0; --i)
    ruchy[i].wypisz();

  return 0;
}