using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
	class Program
	{
		static void Main(string[] args)
		{
			string[] unos = Console.ReadLine().Split();
			int h = int.Parse(unos[0]);
			int n = int.Parse(unos[1]);

			bool[,] vodopad = new bool[h, n];

			for (int i = 0; i < h; i++)
			{
				unos = Console.ReadLine().Split();
				for (int j = 0; j < n; j++)
				{
					vodopad[i, j] = Convert.ToBoolean(int.Parse(unos[j]));
				}
			}
			
			int[] vode = new int[n];
			//na pocetku svaka kolona ima vrednost 1
			for (int i = 0; i < n; i++)
			{
				vode[i] = 1;
			}

			for (int i = 0; i < h; i++)
			{
				for (int j = 0; j < n; j++)
				{
					if(vodopad[i,j] == false)
					{
						//razdvoj()
						
						//pocetak i kraj stena, kolicina vode koju nosi blok
						int start = j;
						int end = start-1;
						int kolicina = 0;

						while(j < n && vodopad[i,j] == false)
						{
							kolicina += vode[j];
							vode[j] = 0;

							end++;
							j++;
						}
						//Console.WriteLine("{0} {1} {2}", start, end, kolicina);
						
						if(start == 0) //leva ivica
						{
							vode[end + 1] += kolicina;
						}
						else if(end == n - 1) //desna ivica
						{
							vode[start-1] += kolicina;
						}
						else //nista od navedenog
						{
							vode[start - 1] += kolicina / 2;
							vode[end + 1] += kolicina / 2;

							if (kolicina % 2 == 1) //ako ima dodatne jedinice
							{
								if (i % 2 == 0)
									vode[start - 1] += 1;
								else
									vode[end + 1] += 1;
							}
							
						}


					}
				}
			}

			for (int i = 0; i < n; i++)
			{
				Console.Write(vode[i] + " ");
			}
			
		}
	}
}