#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void CLR(T& A) {
  A.clear();
}
inline bool insize(int c, int l, int r) {
  if (c >= l && c <= r) return true;
  return false;
}
template <class T>
inline void checkmin(T& a, T b) {
  if (a == -1 || a > b) a = b;
}
template <class T>
inline void checkmax(T& a, T b) {
  if (a < b) a = b;
}
int dx[] = {0, 1, 0, -1, 1, 1, -1, -1};
int dy[] = {1, 0, -1, 0, 1, -1, 1, -1};
int sig(double x) { return fabs(x - 0) < 1e-8 ? 0 : x > 0 ? 1 : -1; }
template <class T>
inline void sf(T& x) {
  scanf("%d", &x);
}
template <class T0, class T1>
inline void sf(T0& x, T1& y) {
  sf(x);
  sf(y);
}
template <class T0, class T1, class T2>
inline void sf(T0& x, T1& y, T2& z) {
  sf(x);
  sf(y);
  sf(z);
}
const int N = 300055;
const int E = 200055;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3F3F3F3F3F3F3F3FLL;
const long long MOD = 1000000007;
struct node {
  char c;
  int x, y;
  node() {}
  node(char _c, int _x, int _y) : c(_c), x(_x), y(_y) {}
  void pt() { printf("%c %d %d\n", c, x, y); }
};
int n, m;
char mp[1000][1000];
bool bo1[1000][1000], bo2[1000][1000];
vector<pair<int, int> > v;
int mc, nc;
pair<int, int> pp;
node no[1000005];
void dfs(int x, int y) {
  bo1[x][y] = 1;
  no[nc++] = node('B', x, y);
  v.push_back(make_pair(x, y));
  for (int i = 0; i < 4; i++) {
    int xx = x + dx[i];
    int yy = y + dy[i];
    if (insize(xx, 1, n) && insize(yy, 1, m) && mp[xx][yy] == '.' &&
        bo1[xx][yy] == 0) {
      dfs(xx, yy);
    }
  }
}
void dfs222(int x, int y) {
  if (x == pp.first && y == pp.second) return;
  bo2[x][y] = 1;
  for (int i = 0; i < 4; i++) {
    int xx = x + dx[i], yy = y + dy[i];
    if (insize(xx, 1, n) && insize(yy, 1, m) && mp[xx][yy] == '.' &&
        bo2[xx][yy] == 0)
      dfs222(xx, yy);
  }
  no[nc++] = node('D', x, y);
  no[nc++] = node('R', x, y);
}
void cal() {
  mc = 4;
  for (__typeof(v.begin()) i = v.begin(); i != v.end(); ++i) {
    int c = 0, x = (*i).first, y = (*i).second;
    for (int j = 0; j < 4; j++) {
      int xx = x + dx[j], yy = y + dy[j];
      if (insize(xx, 1, n) && insize(yy, 1, m) && mp[xx][yy] == '.') c++;
    }
    if (c < mc) {
      pp = make_pair(x, y);
      mc = c;
    }
  }
  int x = pp.first, y = pp.second;
  for (int i = 0; i < 4; i++) {
    int xx = x + dx[i], yy = y + dy[i];
    if (insize(xx, 1, n) && insize(yy, 1, m) && mp[xx][yy] == '.')
      dfs222(xx, yy);
  }
}
int main() {
  nc = 0;
  sf(n, m);
  memset(bo1, 0, sizeof(bo1));
  memset(bo2, 0, sizeof(bo2));
  for (int(i) = (1); (i) <= (n); (i)++) {
    scanf("%s", &mp[i][1]);
  }
  for (int(i) = (1); (i) <= (n); (i)++)
    for (int(j) = (1); (j) <= (m); (j)++)
      if (mp[i][j] == '.' && bo1[i][j] == 0) {
        CLR(v);
        dfs(i, j);
        pp = make_pair(i, j);
        cal();
      }
  printf("%d\n", nc);
  for (int i = 0; i < nc; i++) no[i].pt();
}
