AT_agc066_f [AGC066F] Beautiful String
Description
[problemUrl]: https://atcoder.jp/contests/agc066/tasks/agc066_f
次の条件を満たす文字列を,**美しい文字列**ということにします.
- どの文字も `A`, `B`, `C` のいずれかである.
- どの隣接する $ 2 $ 文字も相異なる.
例えば `AB`, `BCAC` は美しい文字列です.`BB`, `CBAAC` は美しい文字列ではありません.
- - - - - -
美しい文字列 $ S $ が与えられます.あなたはこの文字列に対して,次の操作を繰り返し行うことができます:
- 操作:$ S $ の隣接する $ 2 $ 文字をスワップする.ただしスワップ後の $ S $ も美しい文字列でなくてはならない.
最終的な文字列 $ S $ としてありうる辞書順最小の文字列を求めてください.
$ T $ 個のテストケースが与えられるので,それぞれについて答えを求めてください.
Input Format
入力は以下の形式で標準入力から与えられます.
> $ T $ $ \text{case}_1 $ $ \vdots $ $ \text{case}_T $
各テストケースは以下の形式で与えられます.
> $ S $
Output Format
$ T $ 行出力してください.$ i $ 行目には $ i $ 番目のテストケースについて,最終的な文字列 $ S $ としてありうる辞書順最小の文字列を出力してください.
Explanation/Hint
### 制約
- $ 1\leq\ T\leq\ 10^5 $
- $ S $ は美しい文字列である.
- $ 1\leq\ |S|\leq\ 10^6 $
- $ 1 $ 個の入力に含まれるテストケースについて,それらの $ |S| $ の総和は $ 10^6 $ 以下である.
### Sample Explanation 1
$ 1 $ 番目,$ 2 $ 番目のテストケースについて,次が $ S $ を辞書順最小化する方法の一例となります. - `CAB` → `ACB` → `ABC` - `ACBCB` → `CABCB` → `CBACB` → `BCACB` → `BCABC` → `BACBC` → `ABCBC`