Problem:
Score : 400 points

Problem Statement

Let \mathrm{popcount}(n) be the number of 1s in the binary representation of n.
For example, \mathrm{popcount}(3) = 2, \mathrm{popcount}(7) = 3, and \mathrm{popcount}(0) = 0.

Let f(n) be the number of times the following operation will be done when we repeat it until n becomes 0: "replace n with the remainder when n is divided by \mathrm{popcount}(n)." (It can be proved that, under the constraints of this problem, n always becomes 0 after a finite number of operations.)

For example, when n=7, it becomes 0 after two operations, as follows:

\mathrm{popcount}(7)=3, so we divide 7 by 3 and replace it with the remainder, 1.

\mathrm{popcount}(1)=1, so we divide 1 by 1 and replace it with the remainder, 0.

You are given an integer X with N digits in binary.
For each integer i such that 1 \leq i \leq N, let X_i be what X becomes when the i-th bit from the top is inverted.
Find f(X_1), f(X_2), \ldots, f(X_N).

Constraints

1 \leq N \leq 2 \times 10^5

X is an integer with N digits in binary, possibly with leading zeros.

Input

Input is given from Standard Input in the following format:

N
X

Output

Print N lines. The i-th line should contain the value f(X_i).

Sample Input 1

3
011

Sample Output 1

2
1
1

X_1 = 7, which will change as follows: 7 \rightarrow 1 \rightarrow 0. Thus, f(7) = 2.

X_2 = 1, which will change as follows: 1 \rightarrow 0. Thus, f(1) = 1.

X_3 = 2, which will change as follows: 2 \rightarrow 0. Thus, f(2) = 1.

Sample Input 2

23
00110111001011011001110

Sample Output 2

2
1
2
2
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
1
3

Solution in C++ (GCC 9.2.1) (judge verdict: Runtime Error)

#include <bits/stdc++.h>

#define rep(i, n) for(int i=0; i<(int)(n); i++)
#define FILL0(x) memset(x,0,sizeof(x))
#define FILL1(x) memset(x,-1,sizeof(x))

using namespace std;

typedef long long ll;
typedef pair<ll, ll> P;

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
 

int poppy(ll bits, int cnt)
{
    cnt++;
    int ones=0;
    rep(i, 1<<i<=bits)
    {
        if(1<<i&bits)
            ones++;
    }
    if(ones==0)
        return cnt;


    
    return poppy(bits%ones, cnt);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout << fixed << setprecision(20);

    int N;
    cin >> N;

    string s;
    cin >> s;

    int ones=0;
    rep(i, N)
    {
        if(s[i]=='1')
            ones++;
    }

    for(int i=1;i<=N; i++)
    {
        int tmp =ones;
        ll bits=0;  //格納
        if(s[i]=='1')
        {
            s[i]='0';
            tmp--;

            reverse(s.begin(), s.end());
            
            char sbit[int(log2(tmp))+2];
            s.copy(sbit, int(log2(tmp)+1));

            rep(j, int(log2(tmp))+2)
            {
                if(sbit[j]=='1')
                {
                    bits+=1<<j;
                }
            }

            cout << poppy(bits, 0) << endl;


            reverse(s.begin(), s.end());
            
            s[i]='1';
        }
        else
        {
            s[i]='1';
            tmp++;
            s[i]='0';
        }
        
    }


    return 0;

}