#include <bits/stdc++.h>

using namespace std;

long long NizProlaza[10000000],NizVode1[10000000],NizVode2[10000000],NizPozicijaProlaza[10000000];

long long H,N,PrviLevi,PrviDesni;

void prviL(int x)
     {
         int i=0;
         
         while(NizPozicijaProlaza[i+1]<x and NizPozicijaProlaza[i+1]>0)
         {
             i++;
         }
         PrviLevi=NizPozicijaProlaza[i];
     };

void prviD(int x)
     {
         int i=0;
         
         while(NizPozicijaProlaza[i]<x and (NizPozicijaProlaza[i]>0 or i==0))
         {
             i++;
         }
         PrviDesni=NizPozicijaProlaza[i];
     };

int main()
{
    
    cin>>H>>N;
    
    for(int h=1; h<=H; h++)
    {
        if(h==1)//upisujem NizVode1
        {
            //cout<<endl;
            //cout<<"NizVode1 : "<<endl;
            for(int n=1; n<=N; n++)
            {
                NizVode1[n]=1;
                //cout<<NizVode1[n]<<" ";
            }
            //cout<<endl;
        }
        
        //upisujem NizPozicijaProlaza i NizProlaza 
        {
        
        //cout<<"NizPozicijaProlaza : "<<endl;
        
        int k=1;
        
        for(int n=1; n<=N; n++)
        {
            int a;
            cin>>a;
            
            if(a==1)
            {
                NizPozicijaProlaza[k]=n;
                
                //cout<<NizPozicijaProlaza[k]<<" ";
                
                NizProlaza[n]++;
                k++;
            }
        }
        //cout<<endl;
        }
        
        //cout<<"NizVode2 :"<<endl;
        
        for(int n=1; n<=N; n++)
        {
            //cout<<n<<" /n"<<endl;
            
            if(NizProlaza[n]==1)//ako je moguc slobodan pad
            {
                NizVode2[n]+=NizVode1[n];
            }
            
            if(NizProlaza[n]==0)//ako se voda razliva
            {
                prviL(n);
                //cout<<PrviLevi<<" /PrviLevi"<<endl;
                prviD(n);
                //cout<<PrviDesni<<" /PrviDesni"<<endl;
                
                if(PrviDesni==0)//ako voda ne protice desno
                {
                    NizVode2[PrviLevi]+=NizVode1[n];
                }
                
                
                if(PrviLevi==0)//ako voda ne protice levo
                {
                    NizVode2[PrviDesni]+=NizVode1[n];
                }
                
                if(PrviLevi>0 and PrviDesni>0)//ako se voda racva
                {
                    if(h%2==1)
                    {
                        NizVode2[PrviDesni]+=NizVode1[n]/2;
                    
                        NizVode2[PrviLevi]+=NizVode1[n]/2+NizVode1[n]%2;
                    }
                    
                    if(h%2==0)
                    {
                        NizVode2[PrviDesni]+=NizVode1[n]/2+NizVode1[n]%2;
                    
                        NizVode2[PrviLevi]+=NizVode1[n]/2;
                    }
                }
            }
        }
        
        
            for(int n=1; n<=N; n++)
            {
                if(h==H)
                {
                    cout<<NizVode2[n]<<" ";
                }
                NizVode1[n]=NizVode2[n];
                NizVode2[n]=0;
                NizProlaza[n]=0;
                NizPozicijaProlaza[n]=0;
            }
        
                
    }

    return 0;
}