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

namespace ProblemD
{
    class Program
    {
        static void Main(string[] args)
        {
            var N = int.Parse(Console.ReadLine());
            var X = Console.ReadLine().ToCharArray();
            var modOrg = X.Where(c => c == '1').Count();
            var modP1 = modOrg + 1;
            var modM1 = modOrg == 1 ? 1 : modOrg - 1;
            var powsP1 = new int[N];
            var powsM1 = new int[N];
            powsP1[0] = 1;
            powsM1[0] = 1;
            for (int i = 1; i < powsP1.Length; i++)
            {
                powsP1[i] = (powsP1[i - 1] * 2) % modP1;
                powsM1[i] = (powsM1[i - 1] * 2) % modM1;
            }
            powsP1 = powsP1.Reverse().ToArray();
            powsM1 = powsM1.Reverse().ToArray();
            int XModP1 = 0;
            int XModM1 = 0;
            for (int i = 0; i < X.Length; i++)
            {
                if(X[i] == '1')
                {
                    XModP1 += powsP1[i];
                    XModP1 %= modP1;
                    XModM1 += powsM1[i];
                    XModM1 %= modM1;
                }
            }
            

            var res = new int[N];
            for (int i = 0; i < X.Length; i++)
            {
                if (modOrg == 1 && X[i] == '1') res[i] = 0;
                else
                {
                    var sign = X[i] == '0';
                    var n = sign ? (XModP1 + powsP1[i]) % modP1 : (modM1 + XModM1 - powsM1[i]) % modM1;
                    res[i] = 1;
                    while (n != 0)
                    {
                        n = n % PopCount(n);
                        res[i]++;
                    }
                }
            }

            var sw = new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);

            for (int i = 0; i < N; i++)
            {
                Console.WriteLine(res[i]);
            }

            Console.Out.Flush();
        }

        static int PopCount(int x)
        {
            var res = 0;
            for (int i = 0; i < 18; i++)
                if (Bit(x, i)) res++;
            return res;
        }

        static bool Bit(long x, int digit)
        {
            return (x & (1 << digit)) > 0;
        }

        //static int div(int n, int d)
        //{
        //    int m = 1, q = 0;
        //    while (d <= n)
        //    {
        //        d <<= 1;
        //        m <<= 1;
        //    }
        //    while (1 < m)
        //    {
        //        d >>= 1;
        //        m >>= 1;
        //        if (n >= d)
        //        {
        //            n -= d;
        //            q |= m;
        //        }
        //    }
        //    return q;
        //}

        //private string DecToBin(int number)
        //{
        //    string bin = string.Empty;

        //    for (int i = 0; i < 32; i++)
        //    {
        //        bin = (number & 1).ToString() + bin;
        //        number >>= 1;
        //    }

        //    return bin.TrimStart(new char[] { '0' }); //先頭の0は省略する
        //}
    }
}


Measured memory_bytes: 32772