AT_abc372_c [ABC372C] Count ABC Again

Description

[problemUrl]: https://atcoder.jp/contests/abc372/tasks/abc372_c 長さ $ N $ の文字列 $ S $ が与えられます。クエリが $ Q $ 個与えられるので、順番に処理してください。 $ i $ 番目のクエリは以下の通りです。 - 整数 $ X_i $ と文字 $ C_i $ が与えられるので、 $ S $ の $ X_i $ 番目の文字を $ C_i $ に置き換える。その後、 $ S $ に文字列 `ABC` が部分文字列として何箇所含まれるかを出力する。 ここで、 $ S $ の **部分文字列** とは、$ S $ の先頭から $ 0 $ 文字以上、末尾から $ 0 $ 文字以上削除して得られる文字列のことをいいます。 例えば、`ab` は `abc` の部分文字列ですが、`ac` は `abc` の部分文字列ではありません。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ Q $ $ S $ $ X_1 $ $ C_1 $ $ X_2 $ $ C_2 $ $ \vdots $ $ X_Q $ $ C_Q $

Output Format

$ Q $ 行出力せよ。 $ i $ 行目 $ (1\le\ i\le\ Q) $ には $ i $ 番目のクエリに対する答えを出力せよ。

Explanation/Hint

### 制約 - $ 3\le\ N\le\ 2\times\ 10^5 $ - $ 1\le\ Q\le\ 2\times\ 10^5 $ - $ S $ は英大文字からなる長さ $ N $ の文字列 - $ 1\le\ X_i\le\ N $ - $ C_i $ は英大文字 ### Sample Explanation 1 各クエリを処理した後の $ S $ は次のようになります。 - $ 1 $ つ目のクエリを処理後: $ S= $ `ABCBABC` となる。この中に `ABC` は部分文字列として $ 2 $ 回登場する。 - $ 2 $ つ目のクエリを処理後: $ S= $ `ABABABC` となる。この中に `ABC` は部分文字列として $ 1 $ 回登場する。 - $ 3 $ つ目のクエリを処理後: $ S= $ `ABABCBC` となる。この中に `ABC` は部分文字列として $ 1 $ 回登場する。 - $ 4 $ つ目のクエリを処理後: $ S= $ `ABAGCBC` となる。この中に `ABC` は部分文字列として $ 0 $ 回登場する。 ### Sample Explanation 2 クエリの処理前と処理後で $ S $ が変わらない場合もあります。