#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
const int mod = 1000000007;
const int inf = 2012345678;
const long long infl = 9012345678901234567;
const double pi = 3.1415926535897932384626433832795;
const int N = 51;
char a[N][N], b[N][N];
typedef char arr[N][N];
int n, m;
void conv(int i, int j, arr& a) {
  if (a[i][j] == 'U') {
    a[i][j] = 'L';
    a[i][j + 1] = 'R';
    a[i + 1][j] = 'L';
    a[i + 1][j + 1] = 'R';
  } else {
    a[i][j] = 'U';
    a[i][j + 1] = 'U';
    a[i + 1][j] = 'D';
    a[i + 1][j + 1] = 'D';
  }
}
void go(vector<pair<int, int> >& V, int i, int l, int r, arr& a) {
  if (i == 0) return;
  if (l > r) return;
  vector<int> W;
  for (int j = l; j <= r; j++) {
    if (a[i][j] == 'D') W.push_back(j);
  }
  int sz = W.size();
  if (sz == 0) return;
  for (int k = 0; k < (sz - 1); k++) {
    go(V, i - 1, W[k] + 1, W[k + 1] - 1, a);
  }
  for (int k = 0; k < (sz - 1); k++) {
    int L = W[k] + 1;
    int R = W[k + 1] - 1;
    for (int j = L; j <= R; j += 2) {
      V.emplace_back(i - 1, j);
      conv(i - 1, j, a);
    }
  }
  for (int j = W[0]; j <= W[sz - 1]; j += 2) {
    V.emplace_back(i - 1, j);
    conv(i - 1, j, a);
  }
}
int main() {
  freopen("input.txt", "r", stdin);
  scanf("%d%d", &(n), &(m));
  bool sw = false;
  for (int i = 0; i < (n); i++) {
    scanf("%s", a[i]);
  }
  for (int i = 0; i < (n); i++) scanf("%s", b[i]);
  if (m & 1) {
    sw = true;
    swap(n, m);
    int M = max(m, n);
    for (int i = 0; i < (M); i++)
      for (int j = 0; j < (i); j++) {
        swap(a[i][j], a[j][i]);
        swap(b[i][j], b[j][i]);
      }
    for (int i = 0; i < (n); i++)
      for (int j = 0; j < (m); j++) {
        if (a[i][j] == 'L')
          a[i][j] = 'U';
        else if (a[i][j] == 'R')
          a[i][j] = 'D';
        else if (a[i][j] == 'U')
          a[i][j] = 'L';
        else
          a[i][j] = 'R';
        if (b[i][j] == 'L')
          b[i][j] = 'U';
        else if (b[i][j] == 'R')
          b[i][j] = 'D';
        else if (b[i][j] == 'U')
          b[i][j] = 'L';
        else
          b[i][j] = 'R';
      }
  }
  vector<pair<int, int> > A, B;
  for (int i = n - 1; i >= 0; i--) go(A, i, 0, m - 1, a);
  for (int i = n - 1; i >= 0; i--) go(B, i, 0, m - 1, b);
  printf("%d\n", A.size() + B.size());
  for (auto& x : A) {
    if (sw)
      printf("%d %d\n", x.second + 1, x.first + 1);
    else
      printf("%d %d\n", x.first + 1, x.second + 1);
  }
  int sz = B.size();
  for (int i = sz - 1; i >= 0; i--) {
    auto x = B[i];
    if (sw)
      printf("%d %d\n", x.second + 1, x.first + 1);
    else
      printf("%d %d\n", x.first + 1, x.second + 1);
  }
  return 0;
}
