#include <bits/stdc++.h>
using namespace std;
inline long long rd() {
  long long x = 0;
  int ch = getchar(), f = 1;
  while (!isdigit(ch) && (ch != '-') && (ch != EOF)) ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline void rt(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10)
    rt(x / 10), putchar(x % 10 + '0');
  else
    putchar(x + '0');
}
const int maxn = 55;
int n, m;
char s[maxn][maxn];
vector<pair<int, int> > ret, ans;
void solve(int i, int j, char ch) {
  if (s[i][j] == ch) return;
  if (s[i][j] == 'L') {
    solve(i + 1, j, 'L');
    ret.push_back(make_pair(i, j));
    s[i][j] = 'U', s[i + 1][j] = 'D';
    s[i][j + 1] = 'U', s[i + 1][j + 1] = 'D';
  } else {
    solve(i, j + 1, 'U');
    ret.push_back(make_pair(i, j));
    s[i][j] = 'L', s[i][j + 1] = 'R';
    s[i + 1][j] = 'L', s[i + 1][j + 1] = 'R';
  }
}
void work() {
  ret.clear();
  for (int i = int(1); i <= (int)(n); i++) scanf("%s", s[i] + 1);
  if (!(n & 1)) {
    for (int i = 1; i < n; i += 2)
      for (int j = int(1); j <= (int)(m); j++) solve(i, j, 'U');
  } else {
    for (int j = 1; j < m; j += 2)
      for (int i = int(1); i <= (int)(n); i++) solve(i, j, 'L');
  }
}
int main() {
  n = rd(), m = rd();
  work();
  for (int i = int(0); i <= (int)(ret.size() - 1); i++) ans.push_back(ret[i]);
  work();
  for (int i = int(ret.size() - 1); i >= (int)(0); i--) ans.push_back(ret[i]);
  rt(ans.size()), putchar('\n');
  for (int i = int(0); i <= (int)(ans.size() - 1); i++) {
    rt(ans[i].first), putchar(' ');
    rt(ans[i].second), putchar('\n');
  }
}
