#include <bits/stdc++.h>
using namespace std;
int H, W;
string S[1010][1010];
string T[1010][1010];
int C[2][1919];
vector<vector<int>> R;
void add(int y1, int x1, int y2, int x2) {
  if (y1 == y2 && x1 == x2) return;
  assert(y1 != y2 || x1 != x2);
  R.push_back({y1 + 1, x1 + 1, y2 + 1, x2 + 1});
}
void solve() {
  int i, j, k, l, r, x, y;
  string s;
  cin >> H >> W;
  for (y = 0; y < (H); y++)
    for (x = 0; x < (W); x++) {
      cin >> S[y][x];
    }
  for (y = 0; y < (H); y++)
    for (x = 0; x < (W); x++) {
      reverse((S[y][x].begin()), (S[y][x].end()));
      for (auto& c : S[y][x]) {
        if (c == '0') {
          if (x == 0) {
            C[0][(y + 1) % H]++;
            add(y, x, (y + 1) % H, 0);
          } else {
            C[0][y]++;
            add(y, x, y, 0);
          }
        } else {
          if (x == W - 1) {
            C[1][(y + 1) % H]++;
            add(y, x, (y + 1) % H, W - 1);
          } else {
            C[1][y]++;
            add(y, x, y, W - 1);
          }
        }
      }
    }
  for (y = 0; y < (H); y++) {
    if (y)
      for (i = 0; i < (C[0][y]); i++) add(y, 0, 0, 0);
    if (y != H - 1)
      for (i = 0; i < (C[1][y]); i++) add(y, W - 1, H - 1, W - 1);
  }
  for (y = 0; y < (H); y++)
    for (x = 0; x < (W); x++) {
      cin >> T[y][x];
      reverse((T[y][x].begin()), (T[y][x].end()));
      if (x > 0 && y < H - 1) {
        for (auto& c : T[y][x]) {
          if (c == '0') {
            add(0, 0, y, 0);
            add(y, 0, y, x);
          } else {
            add(H - 1, W - 1, H - 1, x);
            add(H - 1, x, y, x);
          }
        }
      }
    }
  for (y = 1; y < H - 1; y++) {
    x = 0;
    for (auto& c : T[y][x]) {
      if (c == '0') {
        add(0, 0, y, 0);
        add(y, 0, y, x);
      } else {
        add(H - 1, W - 1, H - 1, x);
        add(H - 1, x, y, x);
      }
    }
  }
  for (x = 1; x < W - 1; x++) {
    y = H - 1;
    for (auto& c : T[y][x]) {
      if (c == '0') {
        add(0, 0, y, 0);
        add(y, 0, y, x);
      } else {
        add(H - 1, W - 1, H - 1, x);
        add(H - 1, x, y, x);
      }
    }
  }
  for (i = 0; i < (3); i++) {
    if (i == 0) y = H - 1, x = W - 1;
    if (i == 1) y = 0, x = 0;
    if (i == 2) y = H - 1, x = 0;
    for (auto& c : T[y][x]) {
      if (c == '0')
        add(0, 0, H - 1, 0);
      else
        add(H - 1, W - 1, H - 1, 0);
    }
  }
  for (i = 0; i < (2); i++) {
    if (i == 0) y = H - 1, x = W - 1;
    if (i == 1) y = 0, x = 0;
    for (j = 0; j < (T[y][x].size()); j++) add(H - 1, 0, y, x);
  }
  (void)printf("%d\n", R.size());
  for (auto& r : R) {
    (void)printf("%d %d %d %d\n", r[0], r[1], r[2], r[3]);
  }
}
int main(int argc, char** argv) {
  string s;
  int i;
  if (argc == 1) ios::sync_with_stdio(false), cin.tie(0);
  for (i = 0; i < (argc - 1); i++) s += argv[i + 1], s += '\n';
  for (i = 0; i < (s.size()); i++) ungetc(s[s.size() - 1 - i], stdin);
  cout.tie(0);
  solve();
  return 0;
}
