#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int h,n,ZbirIznadBloka,PreBloka,pps;
    cin >> h >> n ;
    vector<vector<int> > vk(h+2,vector<int>(n));
    for(int i=0;i<h;i++){
        for(int j=0;j<n;j++){
            vk[0][j]=1;
            cin >> vk[i+1][j];
        }
    }
    for(int i=1;i<=h+1;i++){
        int j=0;
        while(j<n){
            if(vk[i][j]==0){ // Imamo blok
                    ZbirIznadBloka=0;
                    if(j==0) { // blok je na pocetku
                        while(j<n && vk[i][j]==0) {
                            ZbirIznadBloka+=vk[i-1][j++];
                        }
                        vk[i-1][j]+=ZbirIznadBloka;
                    }
                    else {
                        PreBloka=j-1;
                        while(j<n && vk[i][j]==0) {
                            ZbirIznadBloka+=vk[i-1][j++];
                        }
                        if(j==n){ // Blok je na kraju
                            vk[i][PreBloka]+=ZbirIznadBloka;
                        }
                        else{ // Blok je u sredini
                            if(ZbirIznadBloka%2==1) { // Neparni zbir nad blokom
                                int dodajDesno= (i%2==0) ? 1 : 0;
                                int dodajLevo= i%2;

                                vk[i-1][j]+=ZbirIznadBloka/2+dodajDesno;
                                vk[i][PreBloka]+=ZbirIznadBloka/2+dodajLevo;
                             }
                             else{ // Parni zbir iznad bloka
                                vk[i-1][j]+=ZbirIznadBloka/2;
                                vk[i][PreBloka]+=ZbirIznadBloka/2;
                            }
                        }
                    }
            }
            if(j<n) { // nije blok, kopiraj odozgo (ili smo zavrsili sa blokom pa je iznad cistina)
                vk[i][j]=vk[i-1][j];
            }


            j++;
        }
    }
    int i=h;
    //for(int i=0;i<=h;i++){
    //    cout << endl;
        for(int j=0;j<n;j++){
            cout << vk[i][j] << " " ;
        }
    //}
    return 0;
}