AT_pakencamp_2023_day3_h ROT
Description
空でない文字列 $ X $ と非負整数 $ K $ に対して、 $ \operatorname{rot}(X,K) $ を次のように定めます。
- $ X $ の先頭の文字を末尾に移動させるという操作を $ K $ 回行った結果得られる文字列。
長さの等しい空でない文字列 $ X, Y $ に対し、 $ f(X, Y) $ を次のように定めます。
- $ 0\leq i\lt|X| $ かつ $ \operatorname{rot}(X,i) $ が $ \operatorname{rot}(Y,i) $ よりも辞書順で小さくなるような整数 $ i $ の個数。
正整数 $ N $ と、ともに長さが $ N $ である文字列 $ S,T $ が与えられます。以下の $ 2 $ 種類のクエリが合計で $ Q $ 個与えられるので処理してください。
- クエリ $ 1 $ : 整数 $ L,R $ が与えられる。 $ S $ の $ L $ 文字目から $ R $ 文字目までを抜き出して得られる文字列を $ S' $ 、 $ T $ の $ L $ 文字目から $ R $ 文字目までを抜き出して得られる文字列を $ T' $ として、 $ f(S',T') $ を求める。
- クエリ $ 2 $ : 整数 $ X, Y $ と英小文字 $ C $ が与えられる。 $ X = 1 $ のとき $ S $ の $ Y $ 文字目を $ C $ で置き換える。 $ X = 2 $ のとき $ T $ の $ Y $ 文字目を $ C $ で置き換える。
Input Format
入力は以下の形式で標準入力から与えられます。
> $ N $ $ S $ $ T $ $ Q $ $ \mathrm{Query}_{1} $ $ \mathrm{Query}_{2} $ $ \vdots $ $ \mathrm{Query}_{Q} $
ただし、 $ \mathrm{Query}_{i} $ は $ i $ 番目のクエリの内容を表します。それぞれのクエリの内容は以下の形式で与えられます。
- $ i $ 番目のクエリがクエリ $ 1 $ であるとき
> $ 1 $ $ L $ $ R $
- $ i $ 番目のクエリがクエリ $ 2 $ であるとき
> $ 2 $ $ X $ $ Y $ $ C $
Output Format
それぞれのクエリ $ 1 $ について答えを $ 1 $ 行に出力してください。
Explanation/Hint
### Sample Explanation 1
$ 1 $ 番目のクエリについて説明します。 $ S'=\mathtt{acb},T'=\mathtt{cab} $ であり、 $ f(S',T') $ を出力する必要があります。
- $ \operatorname{rot}(S',0)=\mathtt{acb},\operatorname{rot}(T',0)=\mathtt{cab} $
- $ \operatorname{rot}(S',1)=\mathtt{cba},\operatorname{rot}(T',1)=\mathtt{abc} $
- $ \operatorname{rot}(S',2)=\mathtt{bac},\operatorname{rot}(T',2)=\mathtt{bca} $
ですから、このクエリに対する出力は $ 2 $ です。
### Constraints
- $ 1\leq N\leq 2\times 10^{5} $
- $ S $ と $ T $ は英小文字からなる長さ $ N $ の文字列
- $ 1\leq Q\leq 2\times 10^{5} $
- クエリ $ 1 $ について、 $ 1\leq L\leq R\leq N $
- クエリ $ 2 $ について、 $ X\in\lbrace 1,2\rbrace,1\leq Y\leq N $ であり、 $ C $ は英小文字