#aising2020d. [aising2020_d]Anything Goes to Zero

[aising2020_d]Anything Goes to Zero

問題文

mathrmpopcount(n)\\mathrm{popcount}(n)nn22 進表記したときの 1 の個数とします。 例えば、$\\mathrm{popcount}(3) = 2, \\mathrm{popcount}(7) = 3, \\mathrm{popcount}(0) = 0$ です。

f(n)f(n) を、「nnmathrmpopcount(n)\\mathrm{popcount}(n) で割ったあまりに置き換える」という操作を繰り返した際に nn00 になるまでの操作回数とします(この問題の制約下で nn が有限回の操作後に必ず 00 になることが証明できます)。

以下は n=7n=7 の例で、22 回の操作で nn00 になります。

  • mathrmpopcount(7)=3\\mathrm{popcount}(7)=3 なので、7733 で割ったあまりである 11 に置き換えます。
  • mathrmpopcount(1)=1\\mathrm{popcount}(1)=1 なので、1111 で割ったあまりである 00 に置き換えます。

22 進表記で NN 桁の整数 XX が与えられます。 1leqileqN1 \\leq i \\leq N を満たす整数 ii について、XX の上から ii 桁目のビットを反転した整数を XiX_i とします。 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
  • XX22 進表記で NN 桁の(先頭の桁が 11 とは限らない)整数

入力

入力は以下の形式で標準入力から与えられる。

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
2
1
3