#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(T x) {
  return x * x;
}
char str[101][101], str2[101][101];
int dead_flag;
int n, m;
char a[101][101];
int first_time = 1;
inline vector<pair<int, int> > gao(int n, int m, char str[101][101]) {
  vector<pair<int, int> > ret;
  int rotate = n & 1;
  if (n & 1) {
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) {
        if (str[i][j] == 'U')
          a[j][i] = 'L';
        else if (str[i][j] == 'D')
          a[j][i] = 'R';
        else if (str[i][j] == 'L')
          a[j][i] = 'U';
        else
          a[j][i] = 'D';
      }
    swap(n, m);
  } else
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) a[i][j] = str[i][j];
  for (int j = 1; j <= m; j++) {
    for (int i = 1; i <= n; i += 2) {
      vector<pair<int, int> > lst;
      char matchtype = 'U';
      int x = i;
      int y = j;
      while (1) {
        if (x < 1 || x > n || y < 1 || y > m) {
          dead_flag = 1;
          return ret;
        }
        if (a[x][y] == matchtype)
          break;
        else {
          lst.push_back(pair<int, int>(x, y));
          if (matchtype == 'U') {
            x++;
            matchtype = 'L';
          } else {
            y++;
            matchtype = 'U';
          }
        }
      }
      reverse(lst.begin(), lst.end());
      for (auto u : lst) {
        ret.push_back(u);
        if (a[u.first][u.second] == 'L') {
          a[u.first][u.second] = 'U';
          a[u.first + 1][u.second] = 'D';
          a[u.first][u.second + 1] = 'U';
          a[u.first + 1][u.second + 1] = 'U';
        } else {
          a[u.first][u.second] = 'L';
          a[u.first + 1][u.second] = 'L';
          a[u.first][u.second + 1] = 'R';
          a[u.first + 1][u.second + 1] = 'R';
        }
      }
    }
  }
  if (rotate)
    for (auto &u : ret) swap(u.first, u.second);
  return ret;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", str[i] + 1);
  for (int i = 1; i <= n; i++) scanf("%s", str2[i] + 1);
  vector<pair<int, int> > fin1 = gao(n, m, str);
  vector<pair<int, int> > fin2 = gao(n, m, str2);
  if (dead_flag) {
    puts("-1");
    return 0;
  }
  reverse(fin2.begin(), fin2.end());
  printf("%d\n", fin1.size() + fin2.size());
  for (auto u : fin1) printf("%d %d\n", u.first, u.second);
  for (auto u : fin2) printf("%d %d\n", u.first, u.second);
}
