AT_arc179_f [ARC179F] All the Same
Description
[problemUrl]: https://atcoder.jp/contests/arc179/tasks/arc179_f
文字 `A` `B` のみからなる長さ $ N $ の文字列 $ S $ が与えられます.
文字 `1` `2` `3` のみからなる長さ $ N $ の文字列 $ X $ に対して **スコア** を以下の手順によって定めます.
> まず変数 $ h_1,h_2,h_3,P $ をそれぞれ $ 0 $ で初期化します.
>
> 次に $ i=1,2,\dots\ ,N $ の順に次の操作を行います.
>
> - $ S $ の $ i $ 文字目が `A` なら操作Aを, `B` なら操作Bを行う. ただし, $ X $ の $ i $ 文字目が表す数字を $ d $ とする.
>
>
> - **操作A** : $ h_d $ に $ 2 $ を加算する.
> - **操作B** : $ d=2 $ または $ h_d\neq\ h_2 $ のとき $ P $ を $ -10^{100} $ とする. そうでなければ $ h_d $ と $ h_2 $ にそれぞれ $ 1 $ を加算する.
> - $ h_1=h_2=h_3 $ のとき $ P $ に $ 1 $ を加える.
>
> 最後に最終的な $ P $ をスコアとします.
スコアを最大にする $ X $ を $ 1 $ つ出力してください.
$ T $ 個のテストケースが与えられるので, それぞれについて解いてください.
Input Format
入力は以下の形式で標準入力から与えられる. ここで $ \mathrm{test}_i $ は $ i $ 番目のテストケースを意味する.
> $ T $ $ \mathrm{test}_1 $ $ \mathrm{test}_2 $ $ \vdots $ $ \mathrm{test}_T $
各テストケースは以下の形式で与えられる.
> $ N $ $ S $
Output Format
$ T $ 行出力せよ.
$ i\ (1\le\ i\le\ T) $ 行目には $ i $ 番目のテストケースにおけるスコアを最大にする文字列 $ X $ を $ 1 $ つ出力せよ.
なお, スコアを最大にする $ X $ が複数存在する場合は, どれを出力しても正答となる.
Explanation/Hint
### 制約
- $ 1\le\ T\le\ 10^5 $
- $ 1\le\ N\le\ 10^6 $
- $ S $ は `A` `B` のみからなる長さ $ N $ の文字列
- $ T,N $ は整数
- すべてのテストケースにおける $ N $ の総和は $ 10^6 $ 以下
### Sample Explanation 1
手順で $ i=1,2,\dots\ ,N $ と進む際の $ (h_1,h_2,h_3,P) $ の変化を述べます. - $ 1 $ 番目のテストケースについて, $ (0,0,0,0)\rightarrow\ (2,0,0,0)\rightarrow\ (2,1,1,0)\rightarrow\ (2,2,2,1)\rightarrow\ (2,2,4,1) $ となります. スコアの最大値は $ 1 $ です. - $ 2 $ 番目のテストケースについて, $ (0,0,0,0)\rightarrow\ (2,0,0,0)\rightarrow\ (2,2,0,0)\rightarrow\ (2,2,2,1)\rightarrow\ (2,4,2,1)\rightarrow\ (4,4,2,1) $ となります. スコアの最大値は $ 1 $ です. $ 3,4,5 $ 番目のテストケースでは, スコアの最大値はそれぞれ $ 0,0,2 $ です. スコアが最大となる $ X $ は複数存在する可能性がありますが, そのうちの $ 1 $ つを出力してください.