#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 200007
char s[MAXN];
int cnt=0;
int mo1=0, mo2=0;
inline int qpow(int a, int b, int p) {
	int ans=1;
	for(;b;b>>=1) {
		if(b&1) ans = (long long)ans*a%p;
		a=(long long)a*a%p;
	}
	return ans;
}
inline int popcnt(int x) {
	x=(x&0x55555555)+((x>>1)&0x55555555);
	x=(x&0x33333333)+((x>>2)&0x33333333);
	x=(x&0x0f0f0f0f)+((x>>4)&0x0f0f0f0f);
	x=(x&0x00ff00ff)+((x>>8)&0x00ff00ff);
	x=(x&0x0000ffff)+((x>>16)&0x0000ffff);
	return x;
}
int main() {
	int n; scanf("%d", &n);
	scanf("%s", s);
	for(int i=0; i<n; i++) {
		if(s[i]=='1') cnt++;
	}
	for(int i=0; i<n; i++) {
		mo1=(mo1*2+(s[i]-'0'))%(cnt+1);
	}
	if(cnt>1) {
		for(int i=0; i<n; i++)
		mo2=(mo2*2+(s[i]-'0'))%(cnt-1);
	}
	for(int i=0; i<n; i++) {
		int now;
		if(s[i]=='0') {
			now=(mo1+qpow(2,n-i-1,cnt+1))%(cnt+1);
		} else {
			if(cnt==1) {puts("0"); continue;}
			now=(mo2-qpow(2,n-i-1,cnt-1)+cnt-1)%(cnt-1);
		}
		int f=1;
		while(now>0) {
			now = now%popcnt(now);
			f++;
		}
		printf("%d\n", f);
	}
}
