AT_abc428_c [ABC428C] Brackets Stack Query
Description
文字列 $ T $ が次の条件を満たすとき、 $ T $ を良い括弧列と呼びます。
- 次の操作を $ 0 $ 回以上繰り返すことで $ T $ を空文字列にすることができる。
- $ T $ に(連続な)部分文字列として含まれる `()` を選び、これを取り除く。
例えば `()` や `(()())`, および空文字列は良い括弧列ですが、`)()(` や `)))` は良い括弧列ではありません。
文字列 $ S $ があります。 $ S $ ははじめ空文字列です。
以下で説明されるクエリを与えられる順に $ Q $ 個処理してください。そして、各クエリの直後に $ S $ が良い括弧列であるかを判定してください。
クエリは次の $ 2 $ 種類です。
- `1 c`: 文字 $ c $ が与えられる。 $ c $ は `(` または `)` である。 $ c $ を $ S $ の末尾に追加する。
- `2`: $ S $ の末尾の文字を削除する。この時、 $ S $ は空文字列でないことが保証される。
Input Format
入力は以下の形式で標準入力から与えられる。ここで $ \mathrm{query}_i $ は $ i $ 番目のクエリを意味する。
> $ Q $ $ \mathrm{query}_1 $ $ \mathrm{query}_2 $ $ \vdots $ $ \mathrm{query}_Q $
各クエリは以下の $ 2 $ 種類のいずれかの形式で与えられる。
> $ 1 $ $ c $
> $ 2 $
Output Format
$ Q $ 行出力せよ。 $ i $ 行目には、 $ i $ 番目のクエリを処理した直後の文字列 $ S $ が良い括弧列である場合は `Yes` を、そうでない場合は `No` を出力せよ。
Explanation/Hint
### Sample Explanation 1
$ 1 $ 番目のクエリを処理した直後の $ S $ は `(` で、これは良い括弧列ではありません。
$ 2 $ 番目のクエリを処理した直後の $ S $ は空文字列で、これは良い括弧列です。
$ 3 $ 番目のクエリを処理した直後の $ S $ は `(` で、これは良い括弧列ではありません。
$ 4 $ 番目のクエリを処理した直後の $ S $ は `()` で、これは良い括弧列です。
$ 5 $ 番目のクエリを処理した直後の $ S $ は `(` で、これは良い括弧列ではありません。
$ 6 $ 番目のクエリを処理した直後の $ S $ は `((` で、これは良い括弧列ではありません。
$ 7 $ 番目のクエリを処理した直後の $ S $ は `(()` で、これは良い括弧列ではありません。
$ 8 $ 番目のクエリを処理した直後の $ S $ は `(())` で、これは良い括弧列です。
### Constraints
- $ 1 \leq Q \leq 8 \times 10^5 $
- $ 1 $ 種類目のクエリの $ c $ は `(` または `)`
- $ 2 $ 種類目のクエリを与えられた時点で $ S $ は空でないことが保証される
- $ Q $ は整数