#include <stdio.h>
#include <stdlib.h>
#include<limits.h>



int main()
{

    int h,n;
    scanf("%d%d",&h,&n);

    int **a = malloc((h+1)*sizeof(int*));
    int **b = malloc((h+1)*sizeof(long long int*));

    for(int i = 1;i<= h;i++)
    {
        a[i] = malloc(n*sizeof(int));
        b[i]=malloc(n*sizeof(long long int));

        for(int j = 0; j<n ;j++) {scanf("%d", &a[i][j]);b[i][j]=0;}

    }

    b[0]=malloc(n*sizeof(long long int));
    a[0]=malloc(n*sizeof(int));
    for(int i = 0;i<n;i++){b[0][i] = 1;a[0][i]=1;}

    for(int i = 0;i<h;i++)
    {
        int paran;
        if((i+1)%2==0)paran = 1; // da li je red paran ili nije
        else paran  = 0;
        int prethodniL = -1; //poslednje gde je voda mogla da prodje

        for(int j = 0;j<n;j++)
        {
            if(a[i+1][j]==1)
            {
                if(b[i][j]!=0)
                  b[i+1][j]+=b[i][j];
                prethodniL = j;

            }
            else // ako imam ispod prepreku
            {

                int vrednost = b[i][j]; //sta delim
                int levo  = vrednost/2;
                int desno = vrednost/2;
                if(vrednost%2!=0)if(paran)desno+= vrednost%2; //podela u slucaju da nije paran
                else levo+= vrednost%2;


                int mestod = j+1,mestol = prethodniL;
                while(  mestod<n && a[i+1][mestod]==0)
                    mestod++;



                if( mestol!=(-1)   && mestod< n && a[i+1][mestod]==1 )
                {
                    b[i+1][mestod]+=desno;
                    b[i+1][mestol]+=levo;
                }
                else
                    if( mestol!=(-1) )b[i+1][mestol]+=vrednost;
                else b[i+1][mestod]+=vrednost;


            }
         }

        }
        
        for(int i = 0;i<n;i++)printf("%d ", b[h][i]);
        for(int i = 0;i<h;i++){free(a[i]);free(b[i]);}
        free(b[h]);
        free(a);
        free(b);




    return 0;
}