#include <bits/stdc++.h>
using namespace std;
#define pb push_back
vector<vector<int> > x,y,levi,desni;   //y je resenje, levi je prvi levi kec od nule, desni je prvi desni kec od nule
int h,n;
vector<int> prvidesni,prvilevi;
void upis(){
	for(int i=1;i<=h;i++){
		vector<int> temp;
		for(int j=0;j<n;j++){
			int t;cin>>t;temp.pb(t);
		}
		x.pb(temp);
	}
}
void postavi(){
	prvilevi.pb(0);
	prvidesni.pb(0);
	for(int i=1;i<=h;i++){
		for(int j=0;j<n;j++)
			if(x[i][j]){
				prvilevi.pb(j);
				break;
			}
	}
	for(int i=1;i<=h;i++){
		for(int j=n-1;j>=0;j--)
			if(x[i][j]){
				prvidesni.pb(j);
				break;
			}
	}
	
	for(int i=1;i<=h;i++){
		int dosad=prvilevi[i];
		for(int j=prvilevi[i];j<n;j++){
			if(x[i][j]==1)
				dosad=j;
			else
				levi[i][j]=dosad;
		}
	}
	for(int i=1;i<=h;i++){
		int dosad=prvidesni[i];
		for(int j=prvidesni[i];j>=0;j--)
			if(x[i][j]==1)
				dosad=j;
			else
				desni[i][j]=dosad;
	}
}
void inic(){   
	vector<int> a;
	for(int i=0;i<n;i++)  
		a.pb(1);
	x.pb(a);  // da pocinje od prvog reda
	y.pb(a);  // pocetni protok je svuda 1
	levi.pb(a);//samo prvi red, bzvz
	desni.pb(a);
	vector<int> b;
	for(int i=0;i<n;i++)
		b.pb(0);
	for(int i=1;i<=h;i++){
		y.pb(b);   //na pocetku je protok nula u svakom sem prvom redu
		levi.pb(b);//da se napravi matrica
		desni.pb(b);//da se napravi matrica
	}	
	}  //namesta da nultom redu bude protok kecevi
void glavna(){
	for(int i=1;i<=h;i++){
		for(int j=0;j<n;j++){
			if(x[i][j]==1){
				y[i][j]+=y[i-1][j];
			}
			else{	//ako je 0
				if(j<prvilevi[i]){  //ako levo od trenutne nule ne postoji kec sav protok koji je iznad ide za jedan u desno
					y[i][desni[i][j]]+=y[i-1][j];
				}
				else{
					if(j>prvidesni[i]){ //ako desno od trenutne 0 ne postoji kec, sav protok iznad se sliva u prvi njemu levi kec
						y[i][levi[i][j]]+=y[i-1][j];
					}
				else{  //i levo i desno od trenutne 0 postoji kec
					if(y[i-1][j]%2==0){
						y[i][levi[i][j]]+=(y[i-1][j]/2);
						y[i][desni[i][j]]+=(y[i-1][j]/2);
					}
					else{
						int idelevo,idedesno;
						if(i%2==1){
							idelevo=(y[i-1][j]+1)/2;
							idedesno=y[i-1][j]-idelevo;
						}
						else{
							idedesno=(y[i-1][j]+1)/2;
							idelevo=y[i-1][j]-idedesno;
						}
						y[i][levi[i][j]]+=idelevo;
						y[i][desni[i][j]]+=idedesno;
					}
				}
				}
			}
		}
	}
}
int main(){
	cin>>h>>n;
	inic();
	upis();
	postavi();
	glavna();
	for(int i=0;i<n;i++)
		cout<<y[h][i]<<" ";
	return 0;
}