#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k;
string a[305][305];
string b[305][305];
int xall[305], yall[305];
int nu[305], nnu[305];
vector<pair<pair<int, int>, pair<int, int> > > ans;
void ddo(pair<pair<int, int>, pair<int, int> > x) {
  int i = x.first.first;
  int j = x.first.second;
  int I = x.second.first;
  int J = x.second.second;
  string st = "";
  st += b[i][j][b[i][j].size() - 1];
  b[I][J] = st + b[I][J];
  b[i][j].erase(b[i][j].size() - 1);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) cout << b[i][j] << " ";
    cout << endl;
  }
}
int main() {
  cin >> n >> m;
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) cin >> a[i][j], b[i][j] = a[i][j];
  for (k = a[1][1].size() - 1; k >= 0; k--)
    if (a[1][1][k] == '1') {
      xall[2]++;
      ans.push_back({{1, 1}, {1, 2}});
    } else {
      yall[2]++;
      ans.push_back({{1, 1}, {2, 1}});
    }
  for (i = 2; i <= n; i++)
    for (j = 2; j <= m; j++) {
      for (k = a[i][j].size() - 1; k >= 0; k--)
        if (a[i][j][k] == '1') {
          xall[j]++;
          ans.push_back({{i, j}, {1, j}});
        } else {
          yall[i]++;
          ans.push_back({{i, j}, {i, 1}});
        }
    }
  for (i = 2; i <= n; i++) {
    for (k = a[i][1].size() - 1; k >= 0; k--)
      if (a[i][1][k] == '1') {
        xall[2]++;
        ans.push_back({{i, 1}, {i, 2}});
        ans.push_back({{i, 2}, {1, 2}});
      } else {
        yall[1]++;
        ans.push_back({{i, 1}, {1, 1}});
      }
    while (yall[i] && i != 2) {
      ans.push_back({{i, 1}, {2, 1}});
      yall[i]--;
      yall[2]++;
    }
  }
  while (yall[1]) {
    yall[1]--;
    yall[2]++;
    ans.push_back({{1, 1}, {2, 1}});
  }
  for (j = 2; j <= m; j++) {
    for (k = a[1][j].size() - 1; k >= 0; k--)
      if (a[1][j][k] == '1') {
        xall[1]++;
        ans.push_back({{1, j}, {1, 1}});
      } else {
        yall[2]++;
        ans.push_back({{1, j}, {2, j}});
        ans.push_back({{2, j}, {2, 1}});
      }
    while (xall[j] && j != 2) {
      ans.push_back({{1, j}, {1, 2}});
      xall[j]--;
      xall[2]++;
    }
  }
  while (xall[1]) {
    xall[1]--;
    xall[2]++;
    ans.push_back({{1, 1}, {1, 2}});
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) cin >> a[i][j];
  for (i = 2; i <= n; i++)
    for (j = 2; j <= m; j++)
      for (k = a[i][j].size() - 1; k >= 0; k--)
        if (a[i][j][k] == '1') {
          if (j != 2) ans.push_back({{1, 2}, {1, j}});
          if (i != 1) ans.push_back({{1, j}, {i, j}});
        } else {
          if (i != 2) ans.push_back({{2, 1}, {i, 1}});
          if (j != 1) ans.push_back({{i, 1}, {i, j}});
        }
  for (i = 3; i <= n; i++)
    for (k = a[i][1].size() - 1; k >= 0; k--)
      if (a[i][1][k] == '1') {
        ans.push_back({{1, 2}, {1, 1}});
        ans.push_back({{1, 1}, {i, 1}});
      } else {
        ans.push_back({{2, 1}, {i, 1}});
      }
  for (j = 3; j <= m; j++)
    for (k = a[1][j].size() - 1; k >= 0; k--)
      if (a[1][j][k] == '1') {
        ans.push_back({{1, 2}, {1, j}});
      } else {
        ans.push_back({{2, 1}, {1, 1}});
        ans.push_back({{1, 1}, {1, j}});
      }
  for (k = a[1][2].size() - 1; k >= 0; k--)
    if (a[1][2][k] == '1')
      ans.push_back({{1, 2}, {1, 1}});
    else
      ans.push_back({{2, 1}, {1, 1}});
  for (k = a[2][1].size() - 1; k >= 0; k--)
    if (a[2][1][k] == '1')
      ans.push_back({{1, 2}, {1, 1}});
    else
      ans.push_back({{2, 1}, {1, 1}});
  for (k = a[1][1].size() - 1; k >= 0; k--)
    if (a[1][1][k] == '1')
      ans.push_back({{1, 2}, {1, 1}});
    else
      ans.push_back({{2, 1}, {1, 1}});
  for (k = 0; k < a[1][2].size(); k++) ans.push_back({{1, 1}, {1, 2}});
  for (k = 0; k < a[2][1].size(); k++) ans.push_back({{1, 1}, {2, 1}});
  cout << ans.size() << endl;
  for (i = 0; i < ans.size(); i++)
    printf("%d %d %d %d\n", ans[i].first.first, ans[i].first.second,
           ans[i].second.first, ans[i].second.second);
}
