func_code_string: #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;   }   