#include <bits/stdc++.h>

using namespace std;



vector<int> fall(vector<int> protok, vector<int> stene, bool nep) {
    int stena = 0;
    bool granica = false;
    int ustenama = 0;
    vector<int> novi(protok.size(), 0);

    for(int i = 0; i < protok.size(); i++)
    {

        if(stene[i]){
            if(stena > 0) //ako je pre bio blok stena
            {
                if(granica) // ako je blok stena od pocetka niza
                {
                    novi[i] += ustenama;
                }
                else
                {
                    if(nep)   // ako je neparan
                    {
                        novi[i] += ustenama/2 + ustenama % 2;
                        novi[i-stena-1] += ustenama / 2;
                    }
                    else //ako je paran
                    {
                        novi[i] += ustenama/2;
                        novi[i-stena-1] += ustenama / 2 + ustenama % 2;
                    }
                }
            }
            novi[i] += protok[i];
            ustenama = 0;
            stena = 0;
            granica = false;

        }
        else {
            stena++;
            ustenama += protok[i];
            if(i == 0)
                granica=true;
            if(i == protok.size()-1)
                novi[i-stena] += ustenama;
        }

    }

    return novi;

}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int m,n;
    cin >> n >> m;
    vector<vector<int> > stene;
    vector <int> protok(m, 1);

    for (int i = 0; i < n; i++)
    {
        vector<int> red(m);
        for(int j = 0; j < m; j++)
            cin >> red[j];
        stene.push_back(red);
    }

    for(int i = 0; i < n; i++) {
        protok = fall(protok, stene[i], i%2);

    }

    for(int i = 0; i < m; i++)
    {
        cout << protok[i] << " " ;
    }



    return 0;
}