#include <iostream>
using namespace std;
int main(){
    int h,n;
    cin >> h >> n;
    int mat[h+1][n+1];
    int mat2[h+1][n+1];
    for(int i=1;i<=h;i++){
        for(int s=1;s<=n;s++){
            cin >> mat[i][s];
        }
    }
    for(int m=1;m<=n;m++){
        mat[0][m] = 1;
        mat2[0][m] = 1;
    }

    for(int i=1;i<=h;i++){
        for(int s=0;s<=n;s++){
            mat2[i][s] = 0;
        }
    }

    for(int i=0;i<h;i++){
        for(int s=1;s<=n;s++){
            if(mat[i][s]>0){
            // AKO JE BROJ MAT[I][S] VECI OD 0
                if(mat[i+1][s]>=1){
                // AKO JE BROJ ISPOD MAT RAZLICIT OD 0
                    mat2[i+1][s] += mat2[i][s];
                } else if(mat[i+1][s]==0){
                    // AKO JE BROJ ISPOD MAT 0
                    if(s==n){
                        //AKO JE MAT U ZADNJOJ KOLONI
                        mat2[i+1][s-1] += mat2[i][s];
                    }else if(mat[i+1][s+1]>=1){
                        // AKO JE BROJ DOLE DESNO OD MAT RAZLICIT OD 0
                        if((s==1) && (mat[i+1][s+1]>=1)){
                            //AKO JE MAT U PRVOJ KOLONI
                            mat2[i+1][s+1] += mat2[i][s];
                        } else {
                            mat2[i+1][s-1] += mat2[i][s] / 2;
                            mat2[i+1][s+1] += mat2[i][s] / 2;

                            if((mat2[i][s]%2)==1){
                            //AKO JE OSTATAK = 1
                                if((i+1 % 2) == 1){
                                // AKO JE RED NEPARAN
                                    mat2[i+1][s-1] += 1;
                                } else {
                                    // AKO JE RED PARAN
                                    mat2[i+1][s+1] += 1;
                                }
                            }
                        }

                    } else {
                        // AKO JE BROJ DOLE DESNO OD MAT 0
                        int nule=0,g;
                        for(g=s;g<=n;g++){
                            if(mat[i+1][g]==1){
                                //AKO NADJE 1 BREAK
                                break;
                            }else if(mat[i+1][g]==0){
                                //AKO JE BROJ 0
                                nule++;
                            }
                        }
                        if(nule == (n-s)+1){
                            //AKO SU NULE DO KRAJA REDA
                            for(g=s;g<=n;g++){
                                mat2[i+1][s-1] += mat2[i][g];
                            }
                            s = n;
                        } else {
                            //AKO IMA N NULA POSLE NULE
                            int zbr = 0;
                            for(int r=s;r<(s+nule);r++){
                                zbr += mat2[i][r];
                            }
                            if((zbr%2)==1){
                                //AKO JE OSTATAK ZBIRA JEDNAK 1
                                mat2[i+1][s-1] += zbr / 2;
                                mat2[i+1][s+nule] += zbr / 2;
                                if((i+1)%2==1){
                                    mat2[i+1][s-1] += 1;
                                } else{
                                    mat2[i+1][s+nule] += 1;
                                }
                            } else {
                                mat2[i+1][s-1] += zbr / 2;
                                mat2[i+1][s+nule] += zbr / 2;
                            }
                            s = s+(nule-1);
                        }
                    }
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout << mat2[h][i] << " ";
    }


}