D - Circulating Ball 解説 /

実行時間制限: 2 sec / メモリ制限: 1024 MiB

配点 : 100 点

問題文

円周上に N 個の箱が並んでおり、時計回りに順に箱 1, 2, \ldots, N と番号が付けられています。 各箱には高々 1 個のボールが入っています。 最初の状態は 0, 1 からなる長さ N の文字列 S で与えられ、S_i= 1 のとき箱 i には 1 個のボールが入っており、S_i= 0 のとき箱 i にはボールが入っていません。

何個でもボールが入る台車を用いて、以下の操作を考えます。

  • 箱を 1 つ選び、その箱の位置に空の台車を置く。その後、以下の手順を繰り返す。
    • 台車の位置にある箱の中のボールの有無と台車の中のボールの有無に応じて、以下のいずれかの処理を行う。
      • 箱にボールが入っているとき:箱からボールを 1 つ取り出して台車に入れる。
      • 箱が空であり、かつ台車にボールが入っているとき:台車からボールを 1 つ取り出して箱に入れる。
      • 箱も台車も空のとき:何もしない。
    • 上記の処理の後、台車にボールが入っていれば、時計回りに次の箱の位置まで台車を進める。台車にボールが入っていなければ、操作を終了する。

各 k = 1, 2, \ldots, N について、それぞれ独立に以下の問題を解いてください。

  • 初期状態から始めて箱 k の位置に台車を置いたとき、台車が最終的に停止した位置にある箱の番号を求めよ。

なお、この操作において台車が必ず停止することは証明できます。

T 個のテストケースが与えられるので、それぞれについて答えを求めてください。

制約

  • 1 \leq T \leq 10^5
  • 2 \leq N \leq 2 \times 10^5
  • S は 0, 1 からなる長さ N の文字列
  • すべてのテストケースについての N の総和は 2 \times 10^5 以下
  • 入力される数値はすべて整数

入力

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

T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T

各テストケースは以下の形式で与えられる。

N
S

出力

答えを合計 T 行で出力せよ。

t 行目には、 t 番目のテストケースにおける k = 1, 2, \ldots, N に対する答えを順に空白区切りで出力せよ。


入力例 1

5
3
101
5
00000
2
11
6
100110
32
10110101011010101100101010110110

出力例 1

2 2 3
1 2 3 4 5
2 1
2 2 3 3 6 6
2 2 18 5 5 7 7 9 9 31 12 12 14 14 16 16 20 19 19 20 22 22 24 24 26 26 4 29 29 11 32 32

1 つ目のテストケースについて説明します。

k=1 の場合、以下のように操作が進みます。

  • 箱 1 からボールを回収し、台車のボールが 1 個になる。台車は空でないので箱 2 に進む。
  • 空の箱 2 へボールを 1 つ入れ、台車のボールが 0 個になる。台車が空になるため、箱 2 で停止する。

k=2 の場合、以下のように操作が進みます。

  • 箱 2 も台車も空のため何も起こらず、そのまま箱 2 で停止する。

k=3 の場合、以下のように操作が進みます。

  • 箱 3 からボールを回収し、台車のボールが 1 個になる。台車は空でないので箱 1 に進む。
  • 箱 1 からボールを回収し、台車のボールが 2 個になる。台車は空でないので箱 2 に進む。
  • 空の箱 2 へボールを 1 つ入れ、台車のボールが 1 個になる。台車は空でないので箱 3 に進む。
  • 空の箱 3(最初のステップでボールを回収したため空になっている)へボールを 1 つ入れ、台車のボールが 0 個になる。台車が空になるため、箱 3 で停止する。

2 つ目のテストケースについて、すべての箱が初期状態で空です。 よって、どの箱 k から開始しても、箱も台車も空のため何も起こらず、そのまま箱 k で停止します。