#include <bits/stdc++.h>
using namespace std;
const long long LLINF = 1LL << 61;
const int INF = 1e9;
const int N = 555;
char grid[N][N];
bool mark[N][N];
int m, n, front, back;
pair<int, int> qu[N * N];
int dx[] = {-1, 0, 0, 1}, dy[] = {0, -1, 1, 0};
vector<pair<char, pair<int, int> > > oper;
void bfs(int sx, int sy) {
  front = 0;
  back = -1;
  qu[++back] = pair<int, int>(sx, sy);
  mark[sx][sy] = 1;
  while (front <= back) {
    pair<int, int> u = qu[front++];
    for (int i = 0, _n = (int)(4); i < _n; ++i) {
      pair<int, int> v(u.first + dx[i], u.second + dy[i]);
      if (v.first < 0 || v.first >= m || v.second < 0 || v.second >= n)
        continue;
      if (grid[v.first][v.second] == '#' || mark[v.first][v.second]) continue;
      mark[v.first][v.second] = 1;
      qu[++back] = v;
    }
  }
  for (int i = (int)(0), _b = (int)(back); i <= _b; ++i) {
    oper.push_back(make_pair('B', pair<int, int>(qu[i].first, qu[i].second)));
  }
  for (int i = (int)(back), _b = (int)(1); i >= _b; --i) {
    oper.push_back(make_pair('D', pair<int, int>(qu[i].first, qu[i].second)));
    oper.push_back(make_pair('R', pair<int, int>(qu[i].first, qu[i].second)));
  }
}
int main() {
  cin >> m >> n;
  for (int i = 0, _n = (int)(m); i < _n; ++i) cin >> grid[i];
  int res = 0;
  for (int i = 0, _n = (int)(m); i < _n; ++i)
    for (int j = 0, _n = (int)(n); j < _n; ++j)
      if (!mark[i][j] && grid[i][j] != '#') {
        bfs(i, j);
      }
  printf("%d\n", oper.size());
  for (__typeof((oper).begin()) i = (oper).begin(); i != (oper).end(); ++(i))
    printf("%c %d %d\n", i->first, i->second.first + 1, i->second.second + 1);
  return 0;
}
