#include <iostream>

using namespace std;

int matrix[10000][10000][2];
int h, n;

int desno(int i, int j)
{
	int temp = 1;
	while (matrix[i + 1][j + temp][0] == 0 && j + temp != n+1)
	{
		temp++;
	}
	if (j + temp == n+1)
	{
		return(2);
	}
	else
	{
		matrix[i + 1][j + temp][1] += matrix[i][j][1] / 2;
		return(1);
	}
}

void levo(int i, int j)
{
	int temp = 1;
	while (matrix[i + 1][j - temp][0] == 0 && j - temp != -1)
	{
		temp++;
	}
	if (j - temp == -1)
	{
		desno(i, j);
	}
	else
	{
		//matrix[i + 1][j - temp][1] += matrix[i][j][1] / 2;
		matrix[i + 1][j - temp][1] = matrix[i + 1][j - temp][1] + (matrix[i][j][1] / 2);
	}
}

int paran(int i, int j)
{
	int temp = 1;
	while (matrix[i + 1][j + temp][0] == 0 && j + temp != n+1)
	{
		temp++;
	}
	if (j + temp == n+1)
	{
		return(2);
	}
	else
	{
		matrix[i + 1][j + temp][1] += 1;
		return(1);
	}
}

void v_paran(int i, int j)
{
	levo(i, j);
	if (desno(i, j) == 2)
	{
		levo(i, j);
	}
}

void ne_paran(int i, int j)
{
	int temp = 1;
	while (matrix[i + 1][j - temp][0] == 0 && j - temp != -1)
	{
		temp++;
	}
	if (j - temp == -1)
	{
		paran(i, j);
	}
	else
	{
		matrix[i + 1][j - temp][1] += 1;
	}
}

void padanje()
{
	for (int i = 0; i <= h; i++)
	{
		for (int j = 0; j < n; j++)
		{
			
			if (matrix[i][j][0] != 0 && matrix[i+1][j][0] != 0)
			{//ispod nema nule
				matrix[i + 1][j][1] += matrix[i][j][1];
			}
			else if (matrix[i + 1][j][0] == 0)
			{//ispod je nula
				if (matrix[i][j][1] > 2)
				{//broj vode iznad nule je veci od 2
					if (matrix[i][j][1] % 2 == 0)
					{//broj vode iznad nule je paran
						v_paran(i, j);
					}
					else
					{//broj vode iznad nule je ne paran
						if ((i + 1) % 2 == 0)
						{//nula je na parnom redu
							if (paran(i, j) == 2)
							{
								ne_paran(i, j);
							}
							matrix[i][j][1] -= 1;
							v_paran(i, j);
						}
						else
						{//nula je na ne parnom redu
							ne_paran(i, j);
							matrix[i][j][1] -= 1;
							v_paran(i, j);
						}
					}
				}
				else
				{//broj vode iznad nule je manji od 2
					if (matrix[i][j][1] == 1)
					{//broj vode iznad nule je 1
						if ((i + 1) % 2 == 0)
						{//nula je u parnom redu
							if (paran(i, j) == 2)
							{
								ne_paran(i, j);
							}
						}
						else
						{//nula je u ne parnom redu
							ne_paran(i, j);
						}
					}
					else
					{//broj vode iznad nule je 2
						ne_paran(i, j);
						if (paran(i, j) == 2)
						{
							ne_paran(i, j);
						}
					}
				}
				
			}
		}
		cout << "REZ= ";
		for (int z = 0; z < n; z++)
		{
			cout << matrix[i][z][1] << " ";
		}
		cout << endl;
	}
}

int main()
{
	cin >> h >> n;

	for (int i = 1; i <= h; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> matrix[i][j][0];
		}
	}
	for (int i = 0; i < n; i++)
	{
		matrix[0][i][0] = 1;
		matrix[0][i][1] = 1;
	}
	padanje();

	//cout << "REZ";
	for (int i = 0; i < n; i++)
	{
		cout << matrix[h][i][1] << " ";
	}
	cout << endl;
}