#include <bits/stdc++.h>
using namespace std;
mt19937 myrand(time(NULL));
const int INF = 2e9;
const int MOD = 1e9 + 7;
const long long INF64 = 1e18;
const long double EPS = 1e-7;
const int N = 53;
int n, m;
char a[N][N], b[N][N];
char bst;
bool read() {
  if (scanf("%d%d\n", &n, &m) != 2) return 0;
  for (int i = 0; i < (n); i++) scanf("%s\n", a[i]);
  for (int i = 0; i < (n); i++) scanf("%s\n", b[i]);
  return 1;
}
vector<pair<int, int> > st[2];
bool check(char d[N][N]) {
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (n); j++)
      if (d[i][j] == bst) return 0;
  return 1;
}
void rot(char d[N][N], int step) {
  while (1) {
    while (1) {
      bool fl = 0;
      for (int i = 0; i < (n - 1); i++)
        for (int j = 0; j < (m - 1); j++)
          if (d[i][j] == 'L' && d[i + 1][j] == 'L') {
            st[step].push_back(make_pair(i, j));
            fl = 1;
            d[i][j] = d[i][j + 1] = 'U';
            d[i + 1][j] = d[i + 1][j + 1] = 'D';
            j++;
          }
      if (!fl) break;
    }
    if (check(d)) return;
    while (1) {
      bool fl = 0;
      for (int i = 0; i < (n - 1); i++)
        for (int j = 0; j < (m - 1); j++)
          if (d[i][j] == 'U' && d[i][j + 1] == 'U') {
            st[step].push_back(make_pair(i, j));
            fl = 1;
            d[i][j] = d[i + 1][j] = 'L';
            d[i][j + 1] = d[i + 1][j + 1] = 'R';
            j++;
          }
      if (!fl) break;
    }
    if (check(d)) return;
  }
}
void solve() {
  bst = (n % 2 == 0 ? 'L' : 'U');
  rot(a, 0);
  rot(b, 1);
  reverse((st[1]).begin(), (st[1]).end());
  printf("%d\n", (int)(st[0]).size() + (int)(st[1]).size());
  for (int i = 0; i < (2); i++)
    for (auto it : st[i]) printf("%d %d\n", it.first + 1, it.second + 1);
}
int main() {
  while (read()) solve();
  return 0;
}
