#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > otp;
int fl[55][55];
void act(int u, int v) {
  otp.push_back(make_pair(u, v));
  if (fl[u][v] == 1)
    fl[u][v] = 0, fl[u + 1][v] = 0, fl[u][v + 1] = fl[u + 1][v + 1] = -1;
  else {
    fl[u][v] = 1, fl[u][v + 1] = 1, fl[u + 1][v] = fl[u + 1][v + 1] = -1;
  }
}
int c[55][55];
char inp[55];
void work(int a, int b, int to) {
  if (fl[a][b] == -1) {
    if (fl[a][b - 1] == 0)
      work(a, b - 1, 1);
    else
      work(a - 1, b, 0);
    work(a, b, to);
    return;
  }
  if (fl[a][b] == to) return;
  if (fl[a][b] == 1)
    work(a, b + 1, 1);
  else
    work(a + 1, b, 0);
  act(a, b);
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  memset(fl, -1, sizeof(fl));
  for (int cs = 0; cs < 2; cs++) {
    for (int i = 1; i <= n; i++) {
      scanf("%s", inp + 1);
      for (int j = 1; j <= m; j++) {
        int tp = 0;
        if (inp[j] == 'U')
          tp = 1;
        else if (inp[j] == 'L')
          tp = 0;
        else
          tp = -1;
        if (cs == 0)
          fl[i][j] = tp;
        else
          c[i][j] = tp;
      }
    }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (c[i][j] == -1)
        continue;
      else if (fl[i][j] != c[i][j])
        work(i, j, c[i][j]);
  cout << otp.size() << endl;
  for (auto v : otp) printf("%d %d\n", v.first, v.second);
  return 0;
}
