#include <bits/stdc++.h>
using namespace std;
template <class T, class T2>
inline int chkmax(T &x, const T2 &y) {
  return x < y ? x = y, 1 : 0;
}
template <class T, class T2>
inline int chkmin(T &x, const T2 &y) {
  return x > y ? x = y, 1 : 0;
}
const int MAXN = 302;
int n, m;
list<int> s[MAXN][MAXN], t[MAXN][MAXN];
int cnt0 = 0, cnt1 = 0;
void read() {
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      string tmp;
      cin >> tmp;
      for (char c : tmp) {
        s[i][j].push_back(c - '0');
        if (c == '0')
          cnt0++;
        else
          cnt1++;
      }
    }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      string tmp;
      cin >> tmp;
      for (char c : tmp) t[i][j].push_back(c - '0');
    }
}
vector<pair<pair<int, int>, pair<int, int> > > answer;
void move(int i, int j, int x, int y, int v) {
  s[x][y].push_front(v);
  answer.push_back({{i, j}, {x, y}});
}
void Move(int i, int j, int x, int y) {
  int v = s[i][j].back();
  s[i][j].pop_back();
  answer.push_back({{i, j}, {x, y}});
  s[x][y].push_front(v);
}
void print() {
  cout << "-------------------" << '\n';
  for (int ii = 0; ii < n; ii++)
    for (int jj = 0; jj < m; jj++) {
      for (int iii : s[ii][jj]) cout << iii;
      cout << " ";
      if (jj == m - 1) cout << '\n';
    }
  cout << "-------------------" << '\n';
}
void solve() {
  int C0 = s[0][0].size(), C1 = s[0][1].size();
  while (C0--) {
    int p = s[0][0].back();
    s[0][0].pop_back();
    if (p == 0)
      s[1][0].push_front(p), answer.push_back({{0, 0}, {1, 0}});
    else
      s[0][1].push_front(p), answer.push_back({{0, 0}, {0, 1}});
  }
  while (C1--) {
    int p = s[0][1].back();
    s[0][1].pop_back();
    if (p == 0)
      s[0][0].push_front(p), answer.push_back({{0, 1}, {0, 0}});
    else
      s[1][1].push_front(p), answer.push_back({{0, 1}, {1, 1}});
  }
  for (int i = n - 1; i >= 0; i--) {
    int C0 = s[i][0].size();
    int C1 = s[i][1].size();
    for (int j = m - 1; j >= 2; j--)
      while (!s[i][j].empty()) {
        int p = s[i][j].back();
        s[i][j].pop_back();
        if (p == 0)
          move(i, j, i, 0, p);
        else
          move(i, j, i, 1, p);
      }
    if (i == 0) continue;
    while (C0--) {
      int p = s[i][0].back();
      s[i][0].pop_back();
      if (p == 0)
        move(i, 0, 0, 0, p);
      else
        move(i, 0, i, 1, p);
    }
    while (C1--) {
      int p = s[i][1].back();
      s[i][1].pop_back();
      if (p == 1)
        move(i, 1, 0, 1, p);
      else
        move(i, 1, i, 0, p);
    }
    while (!s[i][0].empty()) {
      s[i][0].pop_back();
      move(i, 0, 0, 0, 0);
    }
    while (!s[i][1].empty()) {
      s[i][1].pop_back();
      move(i, 1, 0, 1, 1);
    }
  }
  while (!t[0][0].empty()) {
    int x = t[0][0].back();
    t[0][0].pop_back();
    if (x == 1)
      Move(0, 1, 0, 0);
    else {
      Move(0, 0, 1, 0);
      Move(1, 0, 0, 0);
    }
  }
  while (!t[0][1].empty()) {
    int x = t[0][1].back();
    t[0][1].pop_back();
    if (x == 0)
      Move(0, 0, 0, 1);
    else {
      Move(0, 1, 1, 1);
      Move(1, 1, 0, 1);
    }
  }
  for (int i = n - 1; i >= 0; i--) {
    for (int j = m - 1; j >= 2; j--)
      while (!t[i][j].empty()) {
        int p = t[i][j].back();
        t[i][j].pop_back();
        if (p == 0) {
          if (i != 0) {
            Move(0, 0, i, 0);
            Move(i, 0, i, j);
          } else
            Move(0, 0, i, j);
        } else {
          if (i != 0) {
            Move(0, 1, i, 1);
            Move(i, 1, i, j);
          } else
            Move(0, 1, i, j);
        }
      }
    if (i == 0) continue;
    int sz0 = t[i][0].size();
    while (!t[i][0].empty()) {
      int x = t[i][0].back();
      t[i][0].pop_back();
      if (x == 0) {
        Move(0, 0, i, 0);
        Move(i, 0, i, 1);
      } else
        Move(0, 1, i, 1);
    }
    while (!t[i][1].empty()) {
      int x = t[i][1].back();
      t[i][1].pop_back();
      if (x == 0) {
        Move(0, 0, i, 0);
        Move(i, 0, i, 1);
      } else
        Move(0, 1, i, 1);
    }
    for (int ii = 0; ii < sz0; ii++) Move(i, 1, i, 0);
  }
  cout << answer.size() << '\n';
  for (auto it : answer)
    cout << it.first.first + 1 << " " << it.first.second + 1 << " "
         << it.second.first + 1 << " " << it.second.second + 1 << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  read();
  solve();
  return 0;
}
