#include <iostream>

using namespace std;

int main()
{
    int h,n,temp,tempK1,tempK2,tempHalf,zeroCounter = 0;
    bool zero = false,zeroL = false, zeroR = false;

    cin >> h >> n;

    int vodopad[h+1][n],niz[n] = {0};

    for(int i = 0; i <= h; ++i) {
        for(int k = 0; k < n; ++k) {
            if(i == 0) vodopad[i][k] = 1;
            else cin >> vodopad[i][k];
        }
    }

    for(int i = 0; i <= h + 1; ++i) {
        for(int k = 0; k < n; ++k) {
            if(k == 0 && vodopad[i][k] == 0) zeroL = true;
            else if(vodopad[i][k] != 0) zeroL = false;

            if(zeroL) {
                vodopad[i][k] = -1;
            }
        }
        for(int k = n-1; k >= 0; --k) {
            if(k == n-1 && vodopad[i][k] == 0) zeroR = true;
            else if(vodopad[i][k] != 0) zeroR = false;

            if(zeroR) {
                vodopad[i][k] = -2;
            }
        }
    }

    /*cout << endl << endl;

    for(int i = 0; i <= h; ++i) {
        for(int k = 0; k < n; ++k) {
            cout << vodopad[i][k] << " ";
        }
        cout << endl;
    }*/

    for(int i = 1; i <= h; ++i) {
        zeroCounter = 0;
        zero = false;
        while(zero == false) {
            zero = true;
            for(int k = 0; k < n; ++k) {
                temp = 0;
                if(vodopad[i-1][k] > 0) {
                    zero = false;
                    if(vodopad[i][k] == -1) {
                        tempK2 = k + 1;
                        while(vodopad[i][tempK2] <= 0) {
                            tempK2 += 1;
                        }

                        vodopad[i][tempK2] += vodopad[i-1][k];
                        vodopad[i-1][k] = 0;
                    }
                    if(vodopad[i][k] == -2) {
                        tempK1 = k - 1;
                        while(vodopad[i][tempK1] <= 0) {
                            tempK1 -= 1;
                        }

                        vodopad[i][tempK1] += vodopad[i-1][k];
                        vodopad[i-1][k] = 0;
                    }
                    if(vodopad[i][k] == 0) {
                        if(vodopad[i-1][k] % 2 == 1) {
                            temp = 1;

                            vodopad[i-1][k] -= 1;
                        }
                        tempK1 = k - 1;
                        tempK2 = k + 1;
                        tempHalf = vodopad[i-1][k]/2;
                        vodopad[i-1][k] = 0;

                        while(vodopad[i][tempK1] <= 0) {
                            tempK1--;
                        }

                        while(vodopad[i][tempK2] <= 0) {
                            tempK2++;
                        }

                        vodopad[i][tempK1] += tempHalf;
                        vodopad[i][tempK2] += tempHalf;

                        if(i % 2 == 1) vodopad[i][tempK1] += temp;
                        else vodopad[i][tempK2] += temp;

                        temp = 0;
                    }

                    if(vodopad[i][k] > 0) {
                        if(zeroCounter == 0) {
                            vodopad[i][k] += vodopad[i-1][k];
                            vodopad[i-1][k] = 0;
                        }
                    }
                }
            }
            zeroCounter++;
        }

        for(int k = 0; k < n; ++k) {
            if(vodopad[i][k] > 0) vodopad[i][k] -= 1;
        }
    }

    for(int k = 0; k < n; ++k) {
        if(vodopad[h][k] < 0) cout << 0 << " ";
        else cout << vodopad[h][k] << " ";
    }


    return 0;
}