#include <bits/stdc++.h>
using namespace std;
const int MAXN = 55;
int n, m, maxx;
char mt[MAXN][MAXN], tar[MAXN][MAXN];
vector<pair<int, int> > a, b;
void rotate(char s[][MAXN], int x, int y) {
  if (s[x][y] == 'U') {
    s[x][y] = s[x + 1][y] = 'L';
    s[x][y + 1] = s[x + 1][y + 1] = 'R';
  } else {
    s[x][y] = s[x][y + 1] = 'U';
    s[x + 1][y] = s[x + 1][y + 1] = 'D';
  }
}
bool check(char s[][MAXN], int x, int y) {
  if (s[x][y] == s[x][y + 1] && s[x][y] == 'U' &&
      s[x + 1][y] == s[x + 1][y + 1] && s[x + 1][y] == 'D')
    return true;
  if (s[x][y] == s[x + 1][y] && s[x][y] == 'L' &&
      s[x][y + 1] == s[x + 1][y + 1] && s[x][y + 1] == 'R')
    return true;
  return false;
}
bool judge(char s[][MAXN], int x, int y, int flag, vector<pair<int, int> > &a) {
  if (x + 1 >= n || y + 1 >= m) return false;
  if (check(s, x, y)) {
    rotate(s, x, y);
    a.push_back(make_pair(x, y));
    return true;
  } else {
    if (!judge(s, x + 1 - flag, y + flag, flag ^ 1, a)) return false;
    rotate(s, x, y);
    a.push_back(make_pair(x, y));
    return true;
  }
}
void op(char &c) {
  switch (c) {
    case 'L':
      c = 'U';
      break;
    case 'U':
      c = 'L';
      break;
    case 'R':
      c = 'D';
      break;
    case 'D':
      c = 'R';
      break;
  }
}
void change(char s[][MAXN]) {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      op(s[i][j]);
    }
  }
  for (int i = 0; i < maxx; i++) {
    for (int j = 0; j < i; j++) {
      swap(s[i][j], s[j][i]);
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", mt[i]);
  for (int i = 0; i < n; i++) scanf("%s", tar[i]);
  maxx = max(n, m);
  bool changed = false;
  if (m & 1) {
    change(mt);
    change(tar);
    swap(n, m);
    changed = true;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j += 2) {
      if (mt[i][j] != 'L') {
        if (!judge(mt, i, j, 1, a)) {
          puts("-1");
          return 0;
        }
      }
      if (tar[i][j] != 'L') {
        if (!judge(tar, i, j, 1, b)) {
          puts("-1");
          return 0;
        }
      }
    }
  }
  reverse(b.begin(), b.end());
  printf("%d\n", a.size() + b.size());
  for (int i = 0; i < a.size(); i++) {
    if (changed)
      printf("%d %d\n", a[i].second + 1, a[i].first + 1);
    else
      printf("%d %d\n", a[i].first + 1, a[i].second + 1);
  }
  for (int i = 0; i < b.size(); i++) {
    if (changed)
      printf("%d %d\n", b[i].second + 1, b[i].first + 1);
    else
      printf("%d %d\n", b[i].first + 1, b[i].second + 1);
  }
  return 0;
}
