AT_agc077_a [AGC077A] Reverse A…B
Description
`A`, `B` からなる長さ $ N $ の文字列 $ X,Y $ が与えられます. $ X $ の $ i $ 文字目を $ X_i $ と表すことにします.
以下の操作を $ 0 $ 回以上 $ \left\lfloor \frac{N}{2} \right\rfloor $ 回以下行うことで, $ X $ を $ Y $ に一致させることができるか否かを判定してください.
- $ 1\leq l < r \leq N $ かつ $ X_l= $ `A` かつ $ X_r= $ `B` なる整数組 $ (l, r) $ を選ぶ. $ X $ の $ l $ 番目から $ r $ 番目までの要素を反転する.ここで,「 $ X $ の $ l $ 番目から $ r $ 番目までの要素を反転する」とは, $ X_l,X_{l+1},\ldots,X_{r-1},X_r $ を $ X_r,X_{r-1},\ldots,X_{l+1},X_l $ に同時に置き換えることを言う.
$ X $ を $ Y $ に一致させることが可能な場合には,そのような手順をひとつ出力してください.
$ T $ 個のテストケースが与えられるので,それぞれについて答えを求めてください.
Input Format
入力は以下の形式で標準入力から与えられる.
> $ T $ $ \mathrm{case}_1 $ $ \mathrm{case}_2 $ $ \vdots $ $ \mathrm{case}_T $
各テストケースは以下の形式で与えられる.
> $ N $ $ X $ $ Y $
Output Format
$ \mathrm{case}_1,\mathrm{case}_2,\ldots,\mathrm{case}_T $ に対する答えを順に以下の形式で出力せよ.
$ 0 $ 回以上 $ \left\lfloor \frac{N}{2} \right\rfloor $ 回以下の操作で $ X $ を $ Y $ に一致させることが不可能な場合には,`No` と出力せよ.
可能な場合には,操作手順を次の形式で出力せよ.
> Yes $ K $ $ l_1 $ $ r_1 $ $ l_2 $ $ r_2 $ $ \vdots $ $ l_K $ $ r_K $
ここで $ K $ は操作回数で, $ l_i,r_i $ は $ i $ 回目の操作で選ぶ整数 $ l,r $ を表す.これらは次を満たす必要がある.
- $ 0 \leq K \leq \left\lfloor \frac{N}{2} \right\rfloor $
- $ 1 \leq l_i < r_i \leq N $
条件を満たす操作手順が複数存在する場合には,そのどれを出力しても正解と見なされる.
Explanation/Hint
### Sample Explanation 1
$ 1 $ 番目のテストケースでは, $ X_3= $ `A` かつ $ X_5= $ `B` なので, $ X $ の $ 3 $ 番目から $ 5 $ 番目までの要素を反転する操作を行うことができます.この操作を行うと, $ X $ は `ABBAA` になり, $ Y $ と一致します.
$ 2 $ 番目のテストケースでは,どのように操作を行っても $ X $ を $ Y $ に一致させることができません.
### Constraints
- $ 1 \leq T \leq 2.5\times 10^5 $
- $ 2 \leq N \leq 5\times 10^5 $
- 一つのテストケースに含まれる $ N $ の総和は $ 5\times 10^5 $ 以下
- $ X,Y $ は `A`, `B` からなる長さ $ N $ の文字列
- 入力される数値は全て整数