AT_abc157_e [ABC157E] Simple String Queries

Description

[problemUrl]: https://atcoder.jp/contests/abc157/tasks/abc157_e 長さ $ N $ の英小文字から成る文字列 $ S $ が与えられます。 $ Q $ 個のクエリを処理してください。各クエリは以下の $ 2 $ 種類のいずれかです。 - type $ 1 $ : $ S $ の $ i_q $ 文字目を $ c_q $ に変更してください。元々 $ S $ の $ i_q $ 文字目が $ c_q $ である場合は、何もしないでください。 - type $ 2 $ : $ S $ の $ l_q $ 文字目から $ r_q $ 文字目まで (両端含む) から成る部分文字列に表れる文字が何種類あるかを答えてください。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ S $ $ Q $ $ Query_1 $ $ \vdots $ $ Query_Q $ $ 4 $ 行目から $ Q+3 $ 行目の $ Query_i $は、以下の $ 2 $ つのいずれかである。 > $ 1 $ $ i_q $ $ c_q $ > $ 2 $ $ l_q $ $ r_q $

Output Format

type $ 2 $ の各クエリについて答えを改行区切りで出力せよ。

Explanation/Hint

### 制約 - $ N,\ Q,\ i_q,\ l_q,\ r_q $ は整数 - $ S $ は英小文字列 - $ c_q $ は英小文字 - $ 1\ \leq\ N\ \leq\ 500000 $ - $ 1\ \leq\ Q\ \leq\ 20000 $ - $ |S|\ =\ N $ - $ 1\ \leq\ i_q\ \leq\ N $ - $ 1\ \leq\ l_q\ \leq\ r_q\ \leq\ N $ - 各テストケースに type $ 2 $ のクエリは $ 1 $ つ以上存在する ### Sample Explanation 1 $ 1 $ つ目のクエリでは、 `cdbb` には `b` , `c` , `d` の $ 3 $ 種類の文字が含まれますから、 $ 3 $ を出力します。 $ 2 $ つ目のクエリで、 $ S $ が `abcdzbd` に変更されます。 $ 3 $ つ目のクエリでは、 `a` には `a` の $ 1 $ 種類の文字が含まれますから、 $ 1 $ を出力します。 $ 4 $ つ目のクエリで、 $ S $ が `abcazbd` に変更されます。 $ 5 $ つ目のクエリでは、 $ S $ は変わらず `abcazbd` のままです。 $ 6 $ つ目のクエリでは、 `abcazbd` には`a`, `b`, `c`, `d`, `z` の $ 5 $ 種類の文字が含まれますから、 $ 5 $ を出力します。