#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
struct mmp {
  int x, y, xx, yy;
} p;
int n, m, f[310][2], t;
string a[310][310];
vector<mmp> v;
void pb(int x, int y, int xx, int yy) {
  p.x = x;
  p.y = y;
  p.xx = xx;
  p.yy = yy;
  v.push_back(p);
}
int main() {
  int i, j, k;
  cin >> n >> m;
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++) cin >> a[i][j];
  for (k = a[0][0].size() - 1; k >= 0; k--) {
    if (a[0][0][k] == '1')
      pb(0, 0, 0, 1);
    else {
      f[1][0]++;
      pb(0, 0, 1, 0);
    }
  }
  for (k = a[0][1].size() - 1; k >= 0; k--) {
    if (a[0][1][k] == '0')
      pb(0, 1, 0, 0);
    else {
      f[1][1]++;
      pb(0, 1, 1, 1);
    }
  }
  for (i = 1; i < n; i++) {
    for (k = a[i][0].size() - 1; k >= 0; k--) {
      if (a[i][0][k] == '0')
        pb(i, 0, 0, 0);
      else {
        f[i][1]++;
        pb(i, 0, i, 1);
      }
    }
    for (k = a[i][1].size() - 1; k >= 0; k--) {
      if (a[i][1][k] == '1')
        pb(i, 1, 0, 1);
      else {
        f[i][0]++;
        pb(i, 1, i, 0);
      }
    }
  }
  for (i = 0; i < n; i++) {
    for (j = 2; j < m; j++) {
      for (k = a[i][j].size() - 1; k >= 0; k--) {
        if (a[i][j][k] == '0') {
          f[i][0]++;
          pb(i, j, i, 0);
        } else {
          f[i][1]++;
          pb(i, j, i, 1);
        }
      }
    }
  }
  for (i = 1; i < n; i++) {
    for (j = 0; j < f[i][0]; j++) pb(i, 0, 0, 0);
    for (j = 0; j < f[i][1]; j++) pb(i, 1, 0, 1);
  }
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++) cin >> a[i][j];
  for (k = a[0][0].size() - 1; k >= 0; k--) {
    if (a[0][0][k] == '1')
      pb(0, 1, 0, 0);
    else {
      pb(0, 0, 1, 0);
      pb(1, 0, 0, 0);
    }
  }
  for (k = a[0][1].size() - 1; k >= 0; k--) {
    if (a[0][1][k] == '0')
      pb(0, 0, 0, 1);
    else {
      pb(0, 1, 1, 1);
      pb(1, 1, 0, 1);
    }
  }
  for (i = 0; i < n; i++) {
    for (j = 2; j < m; j++) {
      for (k = a[i][j].size() - 1; k >= 0; k--) {
        if (a[i][j][k] == '0') {
          if (i >= 1) pb(0, 0, i, 0);
          pb(i, 0, i, j);
        } else {
          if (i >= 1) pb(0, 1, i, 1);
          pb(i, 1, i, j);
        }
      }
    }
  }
  for (i = 1; i < n; i++) {
    f[i][0] = f[i][1] = 0;
    for (k = a[i][0].size() - 1; k >= 0; k--)
      if (a[i][0][k] == '1') f[i][1]++;
    for (k = a[i][1].size() - 1; k >= 0; k--)
      if (a[i][1][k] == '0') f[i][0]++;
    for (j = 0; j < f[i][0]; j++) pb(0, 0, i, 0);
    for (j = 0; j < f[i][1]; j++) pb(0, 1, i, 1);
  }
  for (i = 1; i < n; i++) {
    for (k = a[i][0].size() - 1; k >= 0; k--) {
      if (a[i][0][k] == '0')
        pb(0, 0, i, 0);
      else
        pb(i, 1, i, 0);
    }
    for (k = a[i][1].size() - 1; k >= 0; k--) {
      if (a[i][1][k] == '1')
        pb(0, 1, i, 1);
      else
        pb(i, 0, i, 1);
    }
  }
  cout << v.size() << "\n";
  for (int i = 0; i < v.size(); i++)
    printf("%d %d %d %d\n", v[i].x + 1, v[i].y + 1, v[i].xx + 1, v[i].yy + 1);
  return 0;
}
