#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

/*int novcanica(long long int broj)
{
	
	int k=broj%10;
	int novcanica=0;
	if(k>=5) 
	{
		novcanica=novcanica+1;
		k=k-5;
	}
	if(k>=2)
	{
		novcanica=novcanica+1;
		k=k-2;
	}
	if(k>=2)
	{
		novcanica=novcanica+1;
		k=k-2;
		
	}
	if(k>=1) novcanica=novcanica+1;
	return novcanica;
}*/
//int prostibrojevi[10000]'
int vodopad[10000][10000];
int voda[10000][10000];
int main(int argc, char** argv) {
	/*long long int broj;
	scanf("%lld" , &broj);
	int brojac=0;
	while(broj>0)
	{
		brojac=brojac+novcanica(broj);
		broj=broj/10;
	}
	printf("%d" , brojac);*/
	//DRUGI ZADATAK
	/*int a,n;
	scanf("%d",&n);
	scanf("%d", &a);
	bool paran=false;
	if(n%2==0) paran=true;
	if(n<3*a)
	{
		printf("-1");
	}
	else 
	{
		if(n<4*a)
		{
			if (paran) 
			{
				printf("0 %d\n0 %d\n%d %d",a,a,n-3*a,a);
			}
			else
			{
				printf("1 %d\n0 %d\n%d %d",a,a,n-1-3*a,a);
			}
		}
		else
		{
			if(paran)
			{
				printf("0 %d\n0 %d\n%d %d" , a,a,(n-2*a+2)/2-2,(n-2*a+2)/2);
			}
			else
			{
				printf("1 %d\n0 %d\n%d %d" ,a,a,(n-2*a+1)/2 -2, (n-2*a+1)/2);
			}
		}
	}*/
	//TRECI ZADATAK
	
	/*long long int a,b;
	scanf("%lld", &a);
	scanf("%lld", &b);
	for(long long int i=0; i*i<a*1.1;i++)
	{
		if(a%i==0)
		{
			if(i*(i^b)==a)
			{
				cout<<i<<(b^i);
				break;
			}
		}
	}*/ 
	//VODOPAD
	int m,n;
	scanf("%d", &m);
	scanf("%d", &n);
	int brojac1;
	for (int i=1;i<m+1;i++)
	{
	    brojac1=0;
		for(int j=0;j<n;j++)
		{
			
			scanf("%d" ,&vodopad[i][j]);
			brojac1=brojac1+1;
		}
		vodopad[i][brojac1]=2;
	}
	for(int i=0;i<n;i++)
	{
		voda[0][i]=1;
	}
	for(int i=1;i<m+1;i++)
	{
		bool paran=false;
		if(i%2==0) paran=true; //paran regulisan
		for(int j=0;j<n;j++)
		{
			if(vodopad[i][j]==1)  voda[i][j]= voda[i][j]+voda[i-1][j];
			else 
			{
				if(vodopad[i][j]==2) break;
				else
				{
					int prvojot=j-1;
					int vodaiznadstena=0;
					bool levikrajnji=false;
					if(j==0) levikrajnji=true;
					while(vodopad[i][j]==0)
					{
						vodaiznadstena=vodaiznadstena+voda[i-1][j];
						j=j+1;
					}
					bool desnikrajnji=false;
					if(vodopad[i][j+1]==2) desnikrajnji=true;
					if(levikrajnji) voda[i][j]=voda[i][j]+vodaiznadstena;
					else
					{
						if(desnikrajnji) voda[i][prvojot]=voda[i][prvojot]+vodaiznadstena;
						else 
						{
							
							if(vodaiznadstena%2==0) 
							{
								voda[i][prvojot]=voda[i][prvojot]+vodaiznadstena/2;
								voda[i][j]=voda[i][j] + vodaiznadstena/2;
							}
							else 
							{
								if(paran)
								{
									voda[i][prvojot]=voda[i][prvojot]+vodaiznadstena/2;
									voda[i][j]=voda[i][j] + vodaiznadstena/2+1;
								}
								else
								{
									voda[i][prvojot]=voda[i][prvojot]+vodaiznadstena/2+1;
									voda[i][j]=voda[i][j] + vodaiznadstena/2;
								}
							}
						}
					}
					j=j-1;
				
				}
			}
			
		}
		/*for(int j=0;j<n-1;j++)
		{
			printf("%d ",voda[i][j]);
		}
		printf("%d\n",voda[i][n-1]);
		}*/
	for(int j=0;j<n-1;j++)
	{
		printf("%d ",voda[m][j]);
	}
	printf("%d",voda[m][n-1]);
	return 0;
}