long popcount(long num){
	long cnt;
	for(long i=0; 2^^i <= num; i++){
		if((num>>i & 1) == 1)cnt++;
	}
	return cnt;
}

void main(){
	long n = _scan!long();
	long x;
	readf("%b\n", &x);
	for(long i=n-1; i>=0; i--){
		// 	x_i bit 反転
		long hatx = x ^ (1<<i);
		
		// カウント
		long cnt;
		while(hatx != 0){
			hatx = hatx%popcount(hatx);
			cnt++;
		}
		cnt.writeln();
	}
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string, std.math;

// 1要素のみの入力
T _scan(T= int)(){
	return to!(T)( readln().chomp() );
}

// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}
