#include <bits/stdc++.h>   using namespace std;   const int MAXN = 53;   const int MAXM = 53;   char mp_cur[MAXN][MAXM];   char mp_end[MAXN][MAXM];   vector<pair<int, int>> ans;   int n, m;   void podn(int i, int j);   void opus(int i, int j) {     if (mp_cur[i][j + 1] ==  L ) {       podn(i, j + 1);     }     ans.push_back({i + 1, j + 1});     mp_cur[i][j] =  L ;     mp_cur[i][j + 1] =  R ;     mp_cur[i + 1][j] =  L ;     mp_cur[i + 1][j + 1] =  R ;   }   void podn(int i, int j) {     if (mp_cur[i + 1][j] ==  U ) {       opus(i + 1, j);     } else if (mp_cur[i + 1][j] ==  R ) {       podn(i + 1, j - 1);       opus(i + 1, j);     }     ans.push_back({i + 1, j + 1});     mp_cur[i][j] =  U ;     mp_cur[i][j + 1] =  U ;     mp_cur[i + 1][j] =  D ;     mp_cur[i + 1][j + 1] =  D ;   }   bool uh(int i, int j) {     if (0 <= i && i < n && 0 <= j && j < m) {       return false;     } else {       return true;     }   }   bool correct() {     for (int i = 0; i < n; ++i) {       for (int j = 0; j < m; ++j) {         if (mp_cur[i][j] ==  U ) {           if (uh(i + 1, j)) {             return false;           } else {             if (!(mp_cur[i + 1][j] ==  D )) {               return false;             }           }         } else if (mp_cur[i][j] ==  D ) {           if (uh(i - 1, j)) {             return false;           } else {             if (!(mp_cur[i - 1][j] ==  U )) return false;           }         } else if (mp_cur[i][j] ==  L ) {           if (uh(i, j + 1)) {             return false;           } else {             if (!(mp_cur[i][j + 1] ==  R )) return false;           }         } else if (mp_cur[i][j] ==  R ) {           if (uh(i, j - 1)) {             return false;           } else {             if (!(mp_cur[i][j - 1] ==  L )) return false;           }         }       }     }     for (int i = 0; i < n; ++i) {       for (int j = 0; j < m; ++j) {         if (mp_end[i][j] ==  U ) {           if (uh(i + 1, j)) {             return false;           } else {             if (!(mp_end[i + 1][j] ==  D )) return false;           }         } else if (mp_end[i][j] ==  D ) {           if (uh(i - 1, j)) {             return false;           } else {             if (!(mp_end[i - 1][j] ==  U )) return false;           }         } else if (mp_end[i][j] ==  L ) {           if (uh(i, j + 1)) {             return false;           } else {             if (!(mp_end[i][j + 1] ==  R )) return false;           }         } else if (mp_end[i][j] ==  R ) {           if (uh(i, j - 1)) {             return false;           } else {             if (!(mp_end[i][j - 1] ==  L )) return false;           }         }       }     }     return true;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cin >> n >> m;     for (int i = 0; i < n; ++i) {       for (int j = 0; j < m; ++j) {         cin >> mp_cur[i][j];       }     }     for (int i = 0; i < n; ++i) {       for (int j = 0; j < m; ++j) {         cin >> mp_end[i][j];       }     }     if (!correct()) {       cout << -1 << endl;       return 0;     }     for (int i = 0; i < n; ++i) {       for (int j = 0; j < m; ++j) {         if (mp_cur[i][j] != mp_end[i][j]) {           if (mp_cur[i][j] ==  U ) {             opus(i, j);           } else if (mp_cur[i][j] ==  L ) {             podn(i, j);           }         }       }     }     cout << ans.size() << endl;     for (int i = 0; i < ans.size(); ++i) {       cout << ans[i].first <<     << ans[i].second << endl;     }     return 0;   }