#include <iostream>

using namespace std;

int n,h;
int matrica[1000][1000];
int matrica2[1000][1000];

bool redParan(int a)
{
    return a%2==0 ? true : false;
}

void radnjaNeParan(int r, int t, int d, int l)
{
    if(redParan(r)) {
        matrica2[r][d] += matrica[r][d]/2+1;
        matrica2[r][l] += matrica[r][l];
    } else {
        matrica2[r][l] += matrica[r][l]/2+1;
        matrica2[r][d] += matrica[r][d];
    }
}

void radnjaParan(int r, int t, int d, int l)
{
    if(redParan(r)) {
        matrica2[r][d] += matrica[r][d]/2;
        matrica2[r][l] += matrica[r][l];
    } else {
        matrica2[r][l] += matrica[r][l]/2;
        matrica2[r][d] += matrica[r][d];
    }
}

bool paran(int a)
{
    return a%2==0 ? true : false;
}

int nadjiDesno(int r,int t)
{
    while(matrica[r][t]==0)
    {
      t++;
    } return t;
}

int nadjiLevo(int r, int t)
{
    while(matrica[r][t]==0)
    {
      t--;
    } return t;
}

void stenaNaPutu(int r, int t)
{
    if(t==0) {
        matrica2[r][nadjiDesno(r,t)] += matrica[r][nadjiDesno(r,t)];
    }
    if(t==n-1) {
        matrica2[r][nadjiLevo(r,t)] += matrica[r][nadjiLevo(r,t)];
    }
    if(t!=0 && t!=n-1) {
        int d=nadjiDesno(r,t), l=nadjiLevo(r,t);
        if(paran(matrica[r-1][t])) radnjaParan(r,t,d,l);
        else radnjaNeParan(r,t,d,l);
    }
}

int funkcija1(int r)
{
    for(int i=0;i<n;i++) {
        if(matrica[r+1][i]!=0) matrica2[r+i][i]+=matrica[r][i];
        if(matrica[r+1][i]==0) stenaNaPutu(r+1,i);
    }
}

int main()
{
    cin >> h >> n;

    for(int i=0;i<n;i++) matrica[0][i]=1;

    for(int i=1;i<=h;i++) {
        for(int j=0;j<n;j++) {
            cin >> matrica[i][j];
            matrica2[i][j]=0;
        }
    }

    for(int i=0;i<=h;i++){
        funkcija1(i);
    }

    for(int i=0;i<n;i++)
        cout << matrica2[h+1][i] << " ";
    return 0;
}