import Control.Monad
import Control.Applicative
import Data.List
f2::Int->Int->[Int]->[[Int]]
f2 _ _ (_:[])=[]
f2 y x (0:0:zs)=f2 y (x+1) (0:zs)
f2 y x (0:1:zs)=f2 y (x+1) (1:zs)
f2 y x (1:0:zs)=[y,x,y,(x+1)]:f2 y (x+1) (1:zs)
f2 y x (1:1:zs)=[y,x,y,(x+1)]:f2 y (x+1) (0:zs)

f2_1::Int->[[Int]]->[[[Int]]]
f2_1 _ []=[]
f2_1 y (z:zs)=(f2 y 1 z):f2_1 (y+1) zs

f3::[Int]->[Int]
f3 (x:[])=[x]
f3 (0:0:zs)=0:f3 (0:zs)
f3 (0:1:zs)=0:f3 (1:zs)
f3 (1:0:zs)=0:f3 (1:zs)
f3 (1:1:zs)=0:f3 (0:zs)

f3_1::[[Int]]->[[Int]]
f3_1 []=[]
f3_1 (z:zs)=(f3 z ): (f3_1 zs)

f1::[Int]->[Int]
f1 []=[]
f1 (x:xs)=x `mod` 2 : f1 xs

f4 :: [Int]->[Int]
f4 (a:b:c:d:[])=(b:a:c:d:[])



main = do
       [h,w]<- map read . words <$> getLine
       ms <- replicateM h getLine
       let ms2=map (map read. words) ms::[[Int]]
           ms3=map f1 ms2
           ans1=concat $ f2_1 1 ms3
           ms4 =transpose $ f3_1 ms3
           ans2=map f4 $ concat $ f2_1 1 ms4
           n=length ans1 + length ans2
           ans3=map unwords $ map (map show) $  (ans1++ans2)
       putStrLn $ show $ n
       mapM_ putStrLn $ ans3