#include <bits/stdc++.h>
using namespace std;
int N, M;
char s[55][55], t[55][55];
vector<pair<int, int> > step;
char getc() {
  char c = getchar();
  while (c == ' ' || c == '\n') c = getchar();
  return c;
}
inline void rotate(int x, int y) {
  step.push_back(pair<int, int>(x, y));
  if (s[x][y] == 'L') {
    s[x][y] = s[x][y + 1] = 'U';
    s[x + 1][y] = s[x + 1][y + 1] = 'D';
  } else {
    s[x][y] = s[x + 1][y] = 'L';
    s[x][y + 1] = s[x + 1][y + 1] = 'R';
  }
}
inline void dfs(int x, int y) {
  if (s[x][y] == 'L') return;
  if (s[x][y + 1] == 'L') {
    dfs(x + 1, y + 1);
    rotate(x, y + 1);
    rotate(x, y);
  } else
    rotate(x, y);
}
vector<pair<int, int> > change() {
  int n = N, m = M;
  if (M & 1) {
    for (int i = 1; i <= N; i++)
      for (int j = 1; j <= M; j++) {
        if (s[i][j] == 'U') t[j][i] = 'L';
        if (s[i][j] == 'D') t[j][i] = 'R';
        if (s[i][j] == 'L') t[j][i] = 'U';
        if (s[i][j] == 'R') t[j][i] = 'D';
      }
    memcpy(s, t, sizeof(s));
    swap(n, m);
  }
  step.clear();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (s[i][j] == 'U') dfs(i, j);
  if (M & 1)
    for (int i = 0; i < step.size(); i++) swap(step[i].first, step[i].second);
  return step;
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= M; j++) s[i][j] = getc();
  vector<pair<int, int> > pre = change();
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= M; j++) s[i][j] = getc();
  vector<pair<int, int> > nxt = change();
  printf("%d\n", pre.size() + nxt.size());
  for (auto t : pre) printf("%d %d\n", t.first, t.second);
  reverse(nxt.begin(), nxt.end());
  for (auto t : nxt) printf("%d %d\n", t.first, t.second);
  return 0;
}
