#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
const int N = 55;
int n, m, sw;
char s[N][N], t[N];
vector<pair<int, int> > ret1, ret2;
void gao(vector<pair<int, int> > &ret) {
  for (int j = 0; j < m; j++) {
    int i = 0;
    while (i < n) {
      if (s[i][j] == 'L') {
        for (int k = 0; i + k < n && j + k < m; k++) {
          if (s[i + 1 + k][j + k] == 'L') {
            for (int l = k; l >= 0; l--) {
              ret.push_back(make_pair(i + l, j + l));
              s[i + l][j + l] = s[i + l][j + l + 1] = 'U';
              s[i + l + 1][j + l] = s[i + l + 1][j + l + 1] = 'D';
              if (l > 0) {
                ret.push_back(make_pair(i + l, j + l - 1));
                s[i + l][j + l - 1] = s[i + l + 1][j + l - 1] = 'L';
                s[i + l][j + l] = s[i + l + 1][j + l] = 'R';
              }
            }
            break;
          }
          if (s[i + 1 + k][j + 1 + k] == 'U') {
            for (int l = k; l >= 0; l--) {
              ret.push_back(make_pair(i + l + 1, j + l));
              s[i + l + 1][j + l] = s[i + l + 2][j + l] = 'L';
              s[i + l + 1][j + l + 1] = s[i + l + 2][j + l + 1] = 'R';
              ret.push_back(make_pair(i + l, j + l));
              s[i + l][j + l] = s[i + l][j + l + 1] = 'U';
              s[i + l + 1][j + l] = s[i + l + 1][j + l + 1] = 'D';
            }
            break;
          }
        }
      }
      i += 2;
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  if (n % 2 == 1) {
    sw = 1;
    for (int i = 0; i < n; i++) {
      scanf("%s", t);
      for (int j = 0; j < m; j++) {
        if (t[j] == 'L')
          s[j][i] = 'U';
        else if (t[j] == 'R')
          s[j][i] = 'D';
        else if (t[j] == 'U')
          s[j][i] = 'L';
        else
          s[j][i] = 'R';
      }
    }
    swap(n, m);
  } else {
    for (int i = 0; i < n; i++) scanf("%s", s[i]);
  }
  gao(ret1);
  if (sw == 1) {
    for (int i = 0; i < m; i++) {
      scanf("%s", t);
      for (int j = 0; j < n; j++) {
        if (t[j] == 'L')
          s[j][i] = 'U';
        else if (t[j] == 'R')
          s[j][i] = 'D';
        else if (t[j] == 'U')
          s[j][i] = 'L';
        else
          s[j][i] = 'R';
      }
    }
  } else {
    for (int i = 0; i < n; i++) scanf("%s", s[i]);
  }
  gao(ret2);
  reverse((ret2).begin(), (ret2).end());
  for (auto p : ret2) ret1.push_back(p);
  if (sw) {
    for (auto &p : ret1) swap(p.first, p.second);
  }
  printf("%d\n", ((int)(ret1).size()));
  for (auto p : ret1) printf("%d %d\n", p.first + 1, p.second + 1);
}
