#include <bits/stdc++.h>
using namespace std;
int n, m;
char S[110][110], T[110][110];
vector<pair<int, int> > stp;
void rotate(int x, int y) {
  stp.push_back(make_pair(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';
  }
}
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);
}
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++) switch (S[i][j]) {
          case 'U':
            T[j][i] = 'L';
            break;
          case 'D':
            T[j][i] = 'R';
            break;
          case 'L':
            T[j][i] = 'U';
            break;
          case 'R':
            T[j][i] = 'D';
            break;
        }
    memcpy(S, T, sizeof(T));
    swap(N, M);
  }
  stp.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 < stp.size(); i++) swap(stp[i].first, stp[i].second);
  return stp;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", S[i] + 1);
  vector<pair<int, int> > pre = change();
  for (int i = 1; i <= n; i++) scanf("%s", S[i] + 1);
  vector<pair<int, int> > nxt = change();
  printf("%d\n", pre.size() + nxt.size());
  for (int i = 0; i < pre.size(); i++)
    printf("%d %d\n", pre[i].first, pre[i].second);
  reverse(nxt.begin(), nxt.end());
  for (int i = 0; i < nxt.size(); i++)
    printf("%d %d\n", nxt[i].first, nxt[i].second);
}
