#include <bits/stdc++.h>
using namespace std;
const int DIM = 55;
char mat[2][DIM][DIM];
vector<pair<int, int>> lst1, lst2;
void move(int k, int p, int q, vector<pair<int, int>> &lst) {
  lst.push_back(make_pair(p, q));
  if (mat[k][p][q] == 'U') {
    assert(mat[k][p + 0][q + 0] == 'U' and mat[k][p + 0][q + 1] == 'U' and
           mat[k][p + 1][q + 0] == 'D' and mat[k][p + 1][q + 1] == 'D');
    mat[k][p + 0][q + 0] = 'L';
    mat[k][p + 0][q + 1] = 'R';
    mat[k][p + 1][q + 0] = 'L';
    mat[k][p + 1][q + 1] = 'R';
  } else {
    assert(mat[k][p + 0][q + 0] == 'L' and mat[k][p + 0][q + 1] == 'R' and
           mat[k][p + 1][q + 0] == 'L' and mat[k][p + 1][q + 1] == 'R');
    mat[k][p + 0][q + 0] = 'U';
    mat[k][p + 0][q + 1] = 'U';
    mat[k][p + 1][q + 0] = 'D';
    mat[k][p + 1][q + 1] = 'D';
  }
}
void solve(int k, int p, int q, bool whSide, vector<pair<int, int>> &lst) {
  if (!whSide) {
    if (mat[k][p][q] != 'L') {
      solve(k, p, q + 1, whSide ^ true, lst);
      move(k, p, q, lst);
    }
  } else {
    if (mat[k][p][q] != 'U') {
      solve(k, p + 1, q, whSide ^ true, lst);
      move(k, p, q, lst);
    }
  }
}
int main(void) {
  int n, m;
  cin >> n >> m;
  for (int k = 0; k <= 1; ++k)
    for (int i = 1; i <= n; ++i) cin >> (mat[k][i] + 1);
  for (int i = 1; i <= n; i += (m % 2 == 0 ? 1 : 2)) {
    for (int j = 1; j <= m; j += (m % 2 == 0 ? 2 : 1)) {
      solve(0, i, j, (m % 2 == 0 ? false : true), lst1);
      solve(1, i, j, (m % 2 == 0 ? false : true), lst2);
    }
  }
  cout << lst1.size() + lst2.size() << "\n";
  for (pair<int, int> pr : lst1) cout << pr.first << " " << pr.second << "\n";
  reverse(lst2.begin(), lst2.end());
  for (pair<int, int> pr : lst2) cout << pr.first << " " << pr.second << "\n";
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) assert(mat[0][i][j] == mat[1][i][j]);
  return 0;
}
