using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] x = Console.ReadLine().Split();
            int n = int.Parse(x[0]);
            int m = int.Parse(x[1]);
            int[,] vodopad = new int[n +2, m];
            for (int i = 0; i < m; i++)
            {
                vodopad[0, i] = 1;
                vodopad[n + 1,i] = 0;
            }
            for (int i = 1; i < n + 1; i++)
            {
                x = Console.ReadLine().Split();
                for (int j = 0; j < m; j++)
                    vodopad[i, j] = int.Parse(x[j])-1;
            }
            bool dole = false;
            bool levo = false;
            bool desno = false;
            bool desno1 = false;
            bool levo1 = false;
            for (int i = 0; i < n+1; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (vodopad[i, j] >= 1)
                    {
                        dole = false;
                        desno = false;
                        levo = false;
                        desno1 = false;
                        levo1 = false;
                        if (vodopad[i + 1, j] >= 0)
                            dole = true;
                        else if (j > 0 && j < m-1)
                        {
                            if (vodopad[i + 1, j + 1] >= 0)
                                desno = true;
                            if (vodopad[i + 1, j - 1] >= 0)
                                levo = true;
                        }
                        else if(j==0 && vodopad[i + 1, j + 1] >= 0)
                            desno = true;
                        else if(j==m-1 && vodopad[i + 1, j - 1] >= 0)
                            levo = true;
                        Console.WriteLine("i: "+i+" j: "+j+" dole: " + dole + " levo: " + levo + " desno: " + desno);
                        if (dole == true)
                            vodopad[i + 1, j] += vodopad[i, j];
                        else if (desno == true && levo == false)
                            vodopad[i + 1, j + 1] += vodopad[i, j];
                        else if (levo == true && desno == false)
                            vodopad[i + 1, j - 1] += vodopad[i, j];
                        else if (desno == true && levo == true)
                        {
                            if (vodopad[i, j] % 2 == 1)
                            {
                                if (j + 1 % 2 == 0)
                                {
                                    vodopad[i + 1, j - 1] += vodopad[i, j] / 2 + 1;
                                    vodopad[i + 1, j + 1] += vodopad[i, j] / 2;
                                }
                                else
                                {
                                    vodopad[i + 1, j + 1] += vodopad[i, j] / 2 + 1;
                                    vodopad[i + 1, j - 1] += vodopad[i, j] / 2;
                                }
                            }
                            else
                            {
                                vodopad[i + 1, j - 1] += vodopad[i, j] / 2;
                                vodopad[i + 1, j + 1] += vodopad[i, j] / 2;
                            }
                        }
                        else
                        {
                            int d = 0, l = 0;
                            for (int k = j - 1; k >= 0; k--)
                            {
                                if (vodopad[i + 1, k] != -1)
                                {
                                    levo1 = true;
                                    l = k;
                                    break;
                                }
                            }
                            for (int k = j + 1; k < m; k++)
                            {
                                if (vodopad[i + 1, k] != -1)
                                {
                                    desno1 = true;
                                    d = k;
                                    break;
                                }
                            }
                            if (desno1 == true && levo1 == true)
                            {
                                if (vodopad[i, j] % 2 == 1)
                                {
                                    if (j + 1 % 2 == 1)
                                    {
                                        vodopad[i + 1, l] += vodopad[i, j] / 2 + 1;
                                        vodopad[i + 1, d] += vodopad[i, j] / 2;
                                    }
                                    else
                                    {
                                        vodopad[i + 1, d] += vodopad[i, j] / 2 + 1;
                                        vodopad[i + 1, l] += vodopad[i, j] / 2;
                                    }
                                }
                                else
                                {
                                    vodopad[i + 1, d] += vodopad[i, j] / 2;
                                    vodopad[i + 1, l] += vodopad[i, j] / 2;
                                }
                            }
                            if (desno1 == true && levo1 == false)
                                vodopad[i + 1, d] += vodopad[i, j];
                            if (levo1 == true && desno1 == false)
                                vodopad[i + 1, l] += vodopad[i, j];
                        }
                    }
                }
            }
            for (int i = 0; i < n+2; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Console.Write(vodopad[i, j] + " ");
                }
                Console.WriteLine();
            }
            for (int i = 0; i < m; i++)
                Console.Write(vodopad[n + 1, i] + " ");
            Console.WriteLine();
        }
    }
}