#include<bits/stdc++.h>
using namespace std;


int main(){
  int h,w;
  cin >> h >> w;
  vector<vector<int>> a(h,vector<int>(w,0));
  for(int i=0;i<h;++i){
    for(int j=0;j<w;++j){
      cin >> a[i][j];
    }
  }
  vector<tuple<int,int,int,int>> ans;
  for(int i=0;i<h;++i){
    for(int j=0;j<w-1;++j){
      if(a[i][j]%2==1){
        a[i][j]--;
        a[i][j+1]++;
        ans.push_back(make_tuple(i,j,i,j+1));
      }
    }
  }
  for(int i=0;i<h-1;++i){
    if(a[i][w-1]%2==1){
      a[i][w-1]--;
      a[i+1][w-1]++;
      ans.push_back(make_tuple(i,w-1,i+1,w-1));
    }
  }
  int n=ans.size();
  cout << n << endl;
  for(auto p : ans){
    cout << get<0>(p)+1 << " " << get<1>(p)+1 << " " << get<2>(p)+1 << " " << get<3>(p)+1 << endl;
  }
  return 0;
}

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll, ll> P;


#define rep(i,n) for(ll (i)=0; (i)<(ll)(n); (i)++)
#define frep(i,m,n) for(ll (i)=(m); (i)<=(ll)(n); (i)++)
#define rrep(i,n) for(ll (i)=(n)-1; (i)>-1; (i)--)
#define frrep(i,m,n) for(ll (i)=(n); (i)>(ll)(m); (i)--)
#define ALL(x) (x).begin(), (x).end()

const ll INF = 100100100100100100;
const ll MOD = 1000000007;

// get abs
ll my_abs(ll a);
// a^n
ll a_n(ll a, ll n);
// get gcd
ll my_gcd(ll a, ll b);
// a^(-1) % MOD 
ll inv(ll a);
// (a+b+c)%MOD
ll madd(ll a, ll b, ll c);
// (a-b)%MOD
ll msub(ll a, ll b);
// (a*b*c)%MOD
ll mtime(ll a, ll b, ll c);


int main() {
    ll h, w;
    cin >> h >> w;
    vector<vector<bool>> odd(h, vector<bool>(w, false)); // 奇数ならtrue;
    vector<pair<P,P>> ans;
    rep(i, h) {
        rep(j, w) {
            ll a; cin >> a;
            if((a%2) == 1) odd[i][j] = true;
        }
    }
    rep(i, h) {
        bool ok = false; // 奇数から取ったコインを移動中
        rep(j, w) {
            if(odd[i][j]) {
                if(ok) {
                    ok = false;
                }
                else {
                    ok = true;
                    if(j != w-1) ans.push_back(make_pair(P(i+1,j+1), P(i+1,j+2)));
                }
            }
            else {
                if(ok && (j != w-1)) {
                    ans.push_back(make_pair(P(i+1,j+1), P(i+1,j+2)));
                }
            }
        }
        if(ok && i != h-1) {
            ans.push_back(make_pair(P(i+1,w), P(i+2,w)));
            odd[i+1][w-1] = !(odd[i+1][w-1]);
        }
    }
    cout << ans.size() << endl;
    rep(i, ans.size()) {
        cout << ans[i].first.first << ' ';
        cout << ans[i].first.second << ' ';
        cout << ans[i].second.first << ' ';
        cout << ans[i].second.second << endl;
    }

    return 0;
}

ll my_abs(ll a) {
    if(a >= 0) return a;
    else return -1 *a;
}

ll a_n(ll a, ll n) { 
    if(n == 0) return 1;
    
    ll ret = a, count = 1;
    while(count * 2 < n) {
        ret *= ret;
        count *= 2;
    }
    if(count == n) return ret;
    else return (ret * a_n(a, n-count));
}

ll my_gcd(ll a, ll b) {
    if(b == 0) return a;
    return my_gcd(b, a%b);
}

ll inv(ll a) {
    return a_n(a, MOD-2);
}

ll madd(ll a, ll b, ll c) {
    ll ret = (a+b) % MOD;
    return (ret+c) % MOD;
}

ll msub(ll a, ll b) {
    if(a < b) return (a-b+MOD) % MOD;
    else return (a-b) % MOD;
}

ll mtime(ll a, ll b, ll c) {
    ll ret = (a*b) % MOD;
    return (ret*c) % MOD;
}
