#include <bits/stdc++.h>
using namespace std;
struct ans1 {
  int x, y;
};
vector<ans1> ans;
int X[] = {-1, 0, 1, 0};
int Y[] = {0, 1, 0, -1}, m, n, c, flag[510][510];
char arr[510][510];
void bfs2(int s, int e) {
  ans.clear();
  flag[s][e] = 2;
  ans.push_back({s, e});
  queue<int> q;
  q.push(s);
  q.push(e);
  int s1, e1, i;
  while (!q.empty()) {
    s = q.front();
    q.pop();
    e = q.front();
    q.pop();
    for (i = 0; i < 4; i++) {
      s1 = X[i] + s;
      e1 = Y[i] + e;
      if (flag[s1][e1] == 1 && s1 >= 0 && e1 >= 0 && s1 < m && e1 < n) {
        flag[s1][e1] = 2;
        q.push(s1);
        q.push(e1);
        ans.push_back({s1, e1});
      }
    }
  }
  if (ans.size() < 3) {
    for (i = 0; i < ans.size(); i++)
      if (i > 0)
        printf("R %d %d\n", ans[i].x + 1, ans[i].y + 1);
      else
        printf("B %d %d\n", ans[i].x + 1, ans[i].y + 1);
  } else {
    for (i = 0; i < ans.size() - 1; i++) {
      printf("B %d %d\n", ans[i].x + 1, ans[i].y + 1);
    }
    printf("R %d %d\n", ans[ans.size() - 1].x + 1, ans[ans.size() - 1].y + 1);
    for (i = ans.size() - 2; i > 0; i--) {
      printf("D %d %d\n", ans[i].x + 1, ans[i].y + 1);
      printf("R %d %d\n", ans[i].x + 1, ans[i].y + 1);
    }
  }
}
void bfs1(int s, int e) {
  int i, s1, e1;
  queue<int> q;
  q.push(s);
  q.push(e);
  c++;
  flag[s][e] = 1;
  while (!q.empty()) {
    s = q.front();
    q.pop();
    e = q.front();
    q.pop();
    for (i = 0; i < 4; i++) {
      s1 = s + X[i];
      e1 = e + Y[i];
      if (!flag[s1][e1] && arr[s1][e1] == '.' && s1 >= 0 && e1 >= 0 && s1 < m &&
          e1 < n) {
        flag[s1][e1] = 1;
        c++;
        q.push(s1);
        q.push(e1);
      }
    }
  }
}
int main() {
  int i, j, mot = 0;
  char z;
  scanf("%d %d", &m, &n);
  scanf("%c", &z);
  for (i = 0; i < m; i++) gets(arr[i]);
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
      if (!flag[i][j] && arr[i][j] == '.') {
        c = 0;
        bfs1(i, j);
        if (c > 2) {
          mot += (c - 2) * 2;
        }
        mot += c;
      }
  cout << mot << endl;
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
      if (flag[i][j] == 1 && arr[i][j] == '.') {
        bfs2(i, j);
      }
  return 0;
}
