#include <bits/stdc++.h>
using namespace std;
const int MN = 51;
char a[MN][MN], b[MN][MN];
const char L = 'L', R = 'R', U = 'U', D = 'D';
vector<pair<int, int> > sol, sol2;
int n, m;
void show() {
  ;
  for (int i = 0; i < n; ++i)
    ;
  ;
  ;
  for (int i = 0; i < n; ++i)
    ;
  ;
}
bool move(char arr[MN][MN], int i, int j) {
  ;
  if (arr[i][j] == U && arr[i][j + 1] == U && arr[i + 1][j] == D &&
      arr[i + 1][j + 1] == D) {
    ;
    arr[i][j] = arr[i + 1][j] = L;
    arr[i][j + 1] = arr[i + 1][j + 1] = R;
  } else if (arr[i][j] == L && arr[i + 1][j] == L && arr[i][j + 1] == R &&
             arr[i + 1][j + 1] == R) {
    ;
    arr[i][j] = arr[i][j + 1] = U;
    arr[i + 1][j] = arr[i + 1][j + 1] = D;
  } else {
    ;
    return false;
  }
  sol.emplace_back(i, j);
  return true;
  ;
  show();
}
void push(char arr[MN][MN], int i, int k, bool ver) {
  char aim = ver ? U : L;
  ;
  show();
  assert(arr[i][k] == L || arr[i][k] == U);
  if (arr[i][k] != aim) {
    if (!move(arr, i, k)) {
      push(arr, i + ver, k + !ver, !ver);
      move(arr, i, k);
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) scanf("%s", a[i]);
  for (int i = 0; i < n; ++i) scanf("%s", b[i]);
  if (n % 2) {
    ;
    for (int k = 0; k < m; k += 2)
      for (int i = 0; i < n; ++i) push(a, i, k, false);
    swap(sol, sol2);
    ;
    for (int k = 0; k < m; k += 2)
      for (int i = 0; i < n; i++) push(b, i, k, false);
  } else {
    ;
    for (int i = 0; i < n; i += 2)
      for (int k = 0; k < m; k++) push(a, i, k, true);
    swap(sol, sol2);
    ;
    for (int i = 0; i < n; i += 2)
      for (int k = 0; k < m; k++) push(b, i, k, true);
  }
  printf("%d\n", (int)(sol.size() + sol2.size()));
  reverse(sol.begin(), sol.end());
  for (auto x : sol2) printf("%d %d\n", x.first + 1, x.second + 1);
  for (auto x : sol) printf("%d %d\n", x.first + 1, x.second + 1);
}
