output_description: Print a sequence of operations that maximizes the number of cells containing
  an even number of coins, in the following format:
  
      
      
      N
      y_1 x_1 y_1' x_1'
      y_2 x_2 y_2' x_2'
      :
      y_N x_N y_N' x_N'
      
  
  That is, in the first line, print an integer N between 0 and H \times W
  (inclusive), representing the number of operations.
  
  In the (i+1)-th line (1 \leq i \leq N), print four integers y_i, x_i, y_i' and
  x_i' (1 \leq y_i, y_i' \leq H and 1 \leq x_i, x_i' \leq W), representing the
  i-th operation. These four integers represents the operation of moving one of
  the coins placed in Cell (y_i, x_i) to a vertically or horizontally adjacent
  cell, (y_i', x_i').
  
  Note that if the specified operation violates the specification in the problem
  statement or the output format is invalid, it will result in _Wrong Answer_.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      H W
      a_{11} a_{12} ... a_{1W}
      a_{21} a_{22} ... a_{2W}
      :
      a_{H1} a_{H2} ... a_{HW}
attempt: # -*- coding: utf-8 -*-
  
  #############
  # Libraries #
  #############
  
  import sys
  
  input = sys.stdin.readline
  
  import math
  
  # from math import gcd
  import bisect
  from collections import defaultdict
  from collections import deque
  from functools import lru_cache
  
  
  #############
  # Constants #
  #############
  
  MOD = 10**9 + 7
  INF = float("inf")
  
  #############
  # Functions #
  #############
  
  
  ######INPUT######
  def I():
      return int(input().strip())
  
  
  def S():
      return input().strip()
  
  
  def IL():
      return list(map(int, input().split()))
  
  
  def SL():
      return list(map(str, input().split()))
  
  
  def ILs(n):
      return list(int(input()) for _ in range(n))
  
  
  def SLs(n):
      return list(input().strip() for _ in range(n))
  
  
  def ILL(n):
      return [list(map(int, input().split())) for _ in range(n)]
  
  
  def SLL(n):
      return [list(map(str, input().split())) for _ in range(n)]
  
  
  ######OUTPUT######
  def P(arg):
      print(arg)
      return
  
  
  def Y():
      print("Yes")
      return
  
  
  def N():
      print("No")
      return
  
  
  def E():
      exit()
  
  
  def PE(arg):
      print(arg)
      exit()
  
  
  def YE():
      print("Yes")
      exit()
  
  
  def NE():
      print("No")
      exit()
  
  
  #####Shorten#####
  def DD(arg):
      return defaultdict(arg)
  
  
  #####Inverse#####
  def inv(n):
      return pow(n, MOD - 2, MOD)
  
  
  ######Combination######
  kaijo_memo = []
  
  
  def kaijo(n):
      if len(kaijo_memo) > n:
          return kaijo_memo[n]
      if len(kaijo_memo) == 0:
          kaijo_memo.append(1)
      while len(kaijo_memo) <= n:
          kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
      return kaijo_memo[n]
  
  
  gyaku_kaijo_memo = []
  
  
  def gyaku_kaijo(n):
      if len(gyaku_kaijo_memo) > n:
          return gyaku_kaijo_memo[n]
      if len(gyaku_kaijo_memo) == 0:
          gyaku_kaijo_memo.append(1)
      while len(gyaku_kaijo_memo) <= n:
          gyaku_kaijo_memo.append(
              gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo), MOD - 2, MOD) % MOD
          )
      return gyaku_kaijo_memo[n]
  
  
  def nCr(n, r):
      if n == r:
          return 1
      if n < r or r < 0:
          return 0
      ret = 1
      ret = ret * kaijo(n) % MOD
      ret = ret * gyaku_kaijo(r) % MOD
      ret = ret * gyaku_kaijo(n - r) % MOD
      return ret
  
  
  ######Factorization######
  def factorization(n):
      arr = []
      temp = n
      for i in range(2, int(-(-(n**0.5) // 1)) + 1):
          if temp % i == 0:
              cnt = 0
              while temp % i == 0:
                  cnt += 1
                  temp //= i
              arr.append([i, cnt])
      if temp != 1:
          arr.append([temp, 1])
      if arr == []:
          arr.append([n, 1])
      return arr
  
  
  #####MakeDivisors######
  def make_divisors(n):
      divisors = []
      for i in range(1, int(n**0.5) + 1):
          if n % i == 0:
              divisors.append(i)
              if i != n // i:
                  divisors.append(n // i)
      return divisors
  
  
  #####GCD#####
  def gcd(a, b):
      while b:
          a, b = b, a % b
      return a
  
  
  #####LCM#####
  def lcm(a, b):
      return a * b // gcd(a, b)
  
  
  #####BitCount#####
  def count_bit(n):
      count = 0
      while n:
          n &= n - 1
          count += 1
      return count
  
  
  #####ChangeBase#####
  def base_10_to_n(X, n):
      if X // n:
          return base_10_to_n(X // n, n) + [X % n]
      return [X % n]
  
  
  def base_n_to_10(X, n):
      return sum(int(str(X)[-i - 1]) * n**i for i in range(len(str(X))))
  
  
  #####IntLog#####
  def int_log(n, a):
      count = 0
      while n >= a:
          n //= a
          count += 1
      return count
  
  
  #############
  # Main Code #
  #############
  
  H, W = IL()
  A = ILL(H)
  
  x = 0
  y = -1
  temoti = None
  
  if H % 2 == 1:
      xg = W - 1
  else:
      xg = 0
  yg = H - 1
  
  
  ans = []
  while x != xg or y != yg:
      if x == 0:
          if y % 2 == 1:
              y += 1
          else:
              x += 1
      elif x == W - 1:
          if y % 2 == 1:
              x -= 1
          else:
              y += 1
      else:
          if y % 2 == 1:
              x -= 1
          else:
              x += 1
      if temoti == None:
          if A[y][x] % 2 == 1:
              temoti = (y, x)
      else:
          if A[y][x] % 2 == 1:
              ans.append([temoti[0] + 1, temoti[1] + 1, y + 1, x + 1])
              temoti = None
          else:
              ans.append([temoti[0] + 1, temoti[1] + 1, y + 1, x + 1])
              temoti = (y, x)
  print(len(ans))
  for a in ans:
      print(*a)
  
problem_description: Statement
  
  There is a grid of square cells with H horizontal rows and W vertical columns.
  The cell at the i-th row and the j-th column will be denoted as Cell (i, j).
  
  In Cell (i, j), a_{ij} coins are placed.
  
  You can perform the following operation any number of times:
  
  Operation: Choose a cell that was not chosen before and contains one or more
  coins, then move one of those coins to a vertically or horizontally adjacent
  cell.
  
  Maximize the number of cells containing an even number of coins.
samples: [{"input": "2 3\n    1 2 3\n    0 1 1", "output": "3\n    2 2 2 3\n    1 1 1 2\n    1 3 1 2\n    \n\nEvery cell contains an even number of coins after the following sequence of\noperations:\n\n  * Move the coin in Cell (2, 2) to Cell (2, 3).\n  * Move the coin in Cell (1, 1) to Cell (1, 2).\n  * Move one of the coins in Cell (1, 3) to Cell (1, 2).\n\n* * *"}, {"input": "3 2\n    1 0\n    2 1\n    1 0", "output": "3\n    1 1 1 2\n    1 2 2 2\n    3 1 3 2\n    \n\n* * *"}, {"input": "1 5\n    9 9 9 9 9", "output": "2\n    1 1 1 2\n    1 3 1 4"}]