#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:200000000")
using namespace std;
struct _ {
  _() { cout.precision(30); }
} __;
const int N = 60;
char a[N][N], b[N][N];
int n, m;
vector<pair<int, int>> seq;
void rotate(int i, int j, bool dir) {
  if (a[i][j] == 'L' && !dir) {
    a[i][j] = a[i][j + 1] = 'U';
    a[i + 1][j] = a[i + 1][j + 1] = 'D';
    seq.push_back({i, j});
  } else if (a[i][j] == 'U' && dir) {
    a[i][j] = a[i + 1][j] = 'L';
    a[i][j + 1] = a[i + 1][j + 1] = 'R';
    seq.push_back({i, j});
  }
}
void f(int i, int j, bool dir) {
  if (a[i][j + 1] == 'L') {
    f(i, j + 1, false);
  }
  if (a[i + 1][j] == 'U') {
    f(i + 1, j, true);
  }
  rotate(i, j, dir);
}
void solve(bool dir) {
  for (int i = 0; i + 1 < n; i += 2) {
    for (int j = 0; j + 1 < m; j += 2) {
      if (dir && (a[i][j] != 'L' || a[i + 1][j] != 'L') ||
          !dir && (a[i][j] != 'U' || a[i][j + 1] != 'U')) {
        f(i, j, dir);
      }
    }
  }
}
void read() {
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < m; j++) {
      a[i][j] = s[j];
    }
  }
}
int main() {
  cin >> n >> m;
  read();
  solve(n % 2 == 1);
  auto prev = seq;
  seq.clear();
  read();
  solve(n % 2 == 1);
  prev.insert(prev.end(), seq.rbegin(), seq.rend());
  cout << prev.size() << endl;
  for (auto x : prev) {
    cout << x.first + 1 << " " << x.second + 1 << endl;
  }
  return 0;
}
