#aising2020d. [aising2020_d]Anything Goes to Zero

[aising2020_d]Anything Goes to Zero

题目描述

定义 mathrmpopcount(n)\\mathrm{popcount}(n)nn 的二进制表示中出现的 1 的个数。例如,mathrmpopcount(3)=2\\mathrm{popcount}(3) = 2mathrmpopcount(7)=3\\mathrm{popcount}(7) = 3mathrmpopcount(0)=0\\mathrm{popcount}(0) = 0

定义 f(n)f(n) 为重复以下操作直到 nn 变为 00 时所进行的次数:将 nn 除以 mathrmpopcount(n)\\mathrm{popcount}(n),并用余数替换 nn。(在本问题的约束条件下,可以证明 nn 经过有限次操作后总会变为 00。)

例如,当 n=7n=7 时,经过两次操作后变为 00,具体过程如下:

  • mathrmpopcount(7)=3\\mathrm{popcount}(7)=3,所以我们将 77 除以 33,并用余数 11 替换它。
  • mathrmpopcount(1)=1\\mathrm{popcount}(1)=1,所以我们将 11 除以 11,并用余数 00 替换它。

给定一个具有 NN 位的二进制整数 XX。对于每个满足 1leqileqN1 \\leq i \\leq N 的整数 ii,设 XiX_i 是把 XX 的从左往右第 ii 位取反后得到的结果。求 f(X1),f(X2),ldots,f(XN)f(X_1), f(X_2), \\ldots, f(X_N)

约束条件

  • 1leqNleq2times1051 \\leq N \\leq 2 \\times 10^5
  • XX 是一个有 NN 位的二进制整数,可能存在前导零。

输入

从标准输入读入输入数据,输入格式如下:

NN XX

输出

输出 NN 行。第 ii 行应包含值 f(Xi)f(X_i)


示例输入1

3
011

示例输出1

2
1
1
  • X1=7X_1 = 7,变化过程如下:7rightarrow1rightarrow07 \\rightarrow 1 \\rightarrow 0。因此,f(7)=2f(7) = 2
  • X2=1X_2 = 1,变化过程如下:1rightarrow01 \\rightarrow 0。因此,f(1)=1f(1) = 1
  • X3=2X_3 = 2,变化过程如下:2rightarrow02 \\rightarrow 0。因此,f(2)=1f(2) = 1

示例输入2

23
00110111001011011001110

示例输出2

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