#include <iostream>
#include <array>
#include <string>

using namespace std;

int main()
{
    int visina, sirina;

    cin >> visina >> sirina;
    int preVodopad[sirina];
    int postVodopad[sirina];

    for(int i = 0; i < sirina; i++) postVodopad[i] = 1;

    for(int i = 0; i < visina; i++){
        for (int y = 0; y < sirina; y++) preVodopad[y] = postVodopad[y];
        for (int y = 0; y < sirina; y++) cin >> postVodopad[y];

        int checkedF = 1;
        int checkedB = 1;
        int nakupljeno = 0;

        if(postVodopad[0] == 0) for(int y = 0; y < sirina; y++) {
            if(postVodopad[y] != 0) {
                postVodopad[y] = preVodopad[y] + nakupljeno;
                break;
            }
            else {
                nakupljeno += preVodopad[y];
                checkedF++;
            }
        }
        else postVodopad[0] = preVodopad[0];

        if(postVodopad[sirina-1] == 0)
        {
            nakupljeno = 0;
            for(int y = sirina-1; y > 0; y--) {
                if(postVodopad[y] != 0) {
                    postVodopad[y] += preVodopad[y] + nakupljeno;
                    break;
                }
            else {
                nakupljeno += preVodopad[y];
                checkedB++;
            }
        }
        }
        else postVodopad[sirina-1] = preVodopad[sirina-1]+1;

        int lastOpening = checkedF-1;
        int carry = 0;

        for(int y = checkedF; y < sirina - checkedB; y++){
            if(postVodopad[y] != 0){
                lastOpening = y;
                postVodopad[y] += preVodopad[y];
            }
            else {
                bool desno = (postVodopad[y+1] != 0);
                if(desno)
                {
                    preVodopad[y];
                    if(preVodopad[y] % 2 == 0){
                        postVodopad[y+1] += preVodopad[y]/2 + carry;
                        postVodopad[lastOpening] += preVodopad[y]/2;
                    }
                    else {
                        if((i+1) % 2 == 0){
                            postVodopad[y+1] += (preVodopad[y]+1)/2 + carry;
                            postVodopad[lastOpening] += (preVodopad[y]-1)/2;
                        }
                        else {
                            postVodopad[y+1] += (preVodopad[y]-1)/2 + carry;
                            postVodopad[lastOpening] += (preVodopad[y]+1)/2;
                        }
                    }
                    carry = 0;
                }
                else {
                    if(preVodopad[y] % 2 == 0){
                        carry += preVodopad[y]/2;
                        postVodopad[lastOpening] += preVodopad[y]/2;
                    }
                    else {
                        if((i+1) % 2 == 0){
                            carry += (preVodopad[y]+1)/2;
                            postVodopad[lastOpening] += (preVodopad[y]-1)/2;
                        }
                        else {
                            carry += (preVodopad[y]-1)/2;
                            postVodopad[lastOpening] += (preVodopad[y]+1)/2;
                        }
                    }
                }
            }
        }
        int counter = 0;
        int index = 0;
        for(int y = 0; y < sirina; y++) if(postVodopad[y] != 0) {
            counter++;
            index = y;
        }
        if(counter == 1)  postVodopad[index]--;
        else for(int y = checkedF; y < sirina; y++) if(postVodopad[y] != 0) postVodopad[y]--;
    }

    for(int i : postVodopad) cout << to_string(i) + " ";
    return 0;
}