#include <bits/stdc++.h>
using namespace std;
int N, M, T;
char grid[502][502], ch;
pair<int, int> ans[500000];
queue<pair<int, int> > q;
void bfs(pair<int, int> st) {
  static int dir[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
  grid[st.second][st.first] = '/';
  pair<int, int> cur, nxt;
  q.push(st);
  while (q.size()) {
    cur = q.front();
    if (cur != st) ans[T++] = cur;
    for (int i = 0; i < 4; i++) {
      nxt.first = cur.first + dir[i][0];
      nxt.second = cur.second + dir[i][1];
      if (grid[nxt.second][nxt.first] == '.') {
        grid[nxt.second][nxt.first] = '/';
        q.push(nxt);
      }
    }
    q.pop();
  }
}
int main() {
  if (fopen("data.in", "r")) freopen("data.in", "r", stdin);
  scanf("%d", &N);
  scanf("%d", &M);
  scanf("%c", &ch);
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) scanf("%c", &grid[i][j]);
    scanf("%c", &ch);
  }
  int num = 0;
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) {
      if (grid[i][j] == '.') bfs(make_pair(j, i));
      num += (grid[i][j] == '/');
    }
  }
  printf("%d\n", num + T * 2);
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= M; j++)
      if (grid[i][j] == '/') printf("B %d %d\n", i, j);
  for (int i = T - 1; i >= 0; i--) {
    int y = ans[i].second;
    int x = ans[i].first;
    printf("D %d %d\n", y, x);
    printf("R %d %d\n", y, x);
  }
  return 0;
}
