#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <utility>
#include <stack>
#include <numeric>
#include <algorithm>
#include <tuple>
#include <stdio.h>
#include <bitset>
#include <limits.h>
#include <complex>
#include <deque>
#include <iomanip>
#include <list>
#include <cstring>
using namespace std;
#define pi pair<int,int>
#define pl pair<long long,long long>
#define chmax(a,b) (a<b ? a=b:0)
#define chmin(a,b) (a>b ? a=b:0)
#define en cout << endl //セミコロンつけろ
//#define MM 1000000000
//#define MOD MM+7
typedef long long ll;
const int MM = 1e9;
const int MOD = MM+7;
const long double PI = acos(-1);
const long long INF = 1e15;
int dx[8] = {-1,0,1,0,-1,-1,1,1};
int dy[8] = {0,-1,0,1,-1,1,1,-1};
// 'A' = 65, 'Z' = 90, 'a' = 97, 'z' = 122
template<typename T>
T GCD(T u,T v){
    return v ? GCD(v,u%v) : u;
}
template<typename T>
T LCM(T x,T y){
    T gc = GCD(x,y);
    return x*y/gc;
}
struct edge {
    ll to,cost;
};

/*
const int COM_MAX = 500500;
long long fac[COM_MAX],finv[COM_MAX],inv[COM_MAX];
void init(){
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for(int i = 2; i < COM_MAX; i++){
        fac[i] = fac[i-1]*i%MOD;
        inv[i] = MOD - inv[MOD%i]*(MOD/i)%MOD;
        finv[i] = finv[i-1]*inv[i]%MOD;
    }
}
long long COM(int n,int k){
    if(n < k || n < 0 || k < 0) return 0;
    return fac[n]*(finv[k]*finv[n-k]%MOD)%MOD;
}
*/

struct Move {
    int fromy,fromx,toy,tox;
};

int main(){
    int H,W; cin >> H >> W;
    int a[505][505];
    for (int i = 0; i < H; i++){
        for (int j = 0; j < W; j++){
            cin >> a[i][j];
        }
    }

    vector<Move> mv;
    for (int i = 0; i < H; i++){
        if (i % 2 == 1){
            for (int j = W-1; j >= 0; j--){
                if (j != 0){
                    if (a[i][j] % 2 == 1){
                        a[i][j]--;
                        a[i][j-1]++;
                        mv.push_back({i,j,i,j-1});
                    }
                } else if (j == 0){
                    if (a[i][j] % 2 == 1 && i+1 < H){
                        a[i][j]--;
                        a[i+1][j]++;
                        mv.push_back({i,j,i+1,j});
                    }
                }
            }
        } else if (i % 2== 0){
            for (int j = 0; j < W; j++){
                if (j != W-1){
                    if (a[i][j] % 2 == 1){
                        a[i][j]--;
                        a[i][j+1]++;
                        mv.push_back({i,j,i,j+1});
                    }
                } else if (j == W-1){
                    if (a[i][j] % 2 == 1 && i+1 < H){
                        a[i][j]--;
                        a[i+1][j]++;
                        mv.push_back({i,j,i+1,j});
                    }
                }
            }
        }
    }
    //cout << "----------------------" << endl;
    cout << mv.size() << endl;
    for (int i = 0; i < mv.size(); i++){
        cout << mv[i].fromy + 1 << " " << mv[i].fromx + 1 << " " << mv[i].toy + 1 << " " << mv[i].tox + 1 << endl;
    }
    /*
    for (int i = 0; i < H; i++){
        for (int j = 0; j < W; j++){
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    */
}

Measured memory_bytes: 5232