AT_abc350_g [ABC350G] Mediator
Description
[problemUrl]: https://atcoder.jp/contests/abc350/tasks/abc350_g
**特殊な入力形式に注意してください。 また、メモリ制限が通常より小さいことに注意してください。**
頂点 $ 1,2,\dots,N $ の $ N $ 頂点からなる無向グラフがあり、最初辺はありません。
このグラフに対して、以下の $ Q $ 個のクエリを処理してください。
> 1 $ u $ $ v $
タイプ $ 1 $ : 頂点 $ u $ と頂点 $ v $ との間に辺を追加する。
辺を追加する前の時点で、 $ u $ と $ v $ は異なる連結成分に属する。(すなわち、グラフは常に森である。)
> 2 $ u $ $ v $
タイプ $ 2 $ : 頂点 $ u $ と頂点 $ v $ の双方に隣接する頂点があるならその番号を答え、無ければ $ 0 $ と答える。
グラフが常に森であることから、このクエリに対する解答は一意に定まることが示せる。
但し、上記のクエリは暗号化して与えられます。
本来のクエリは $ 3 $ つの整数 $ A,B,C $ として定義され、これをもとに暗号化されたクエリが $ 3 $ つの整数 $ a,b,c $ として与えられます。
タイプ $ 2 $ のクエリのうち、先頭から $ k $ 個目のものに対する解答を $ X_k $ とします。 さらに、 $ k\ =\ 0 $ に対して $ X_k\ =\ 0 $ と定義します。
与えられた $ a,b,c $ から以下の通りに $ A,B,C $ を復号してください。
- そのクエリより前に与えられたタイプ $ 2 $ のクエリの個数を $ l $ とする(そのクエリ自身は数えない)。このとき、以下の通りに復号せよ。
- $ A\ =\ 1\ +\ (((a\ \times\ (1+X_l))\ \mod\ 998244353)\ \mod\ 2) $
- $ B\ =\ 1\ +\ (((b\ \times\ (1+X_l))\ \mod\ 998244353)\ \mod\ N) $
- $ C\ =\ 1\ +\ (((c\ \times\ (1+X_l))\ \mod\ 998244353)\ \mod\ N) $
Input Format
入力は以下の形式で標準入力から与えられる。
但し、 $ \rm{Query} $$ _i $ は $ i $ 個目のクエリを表す。
> $ N $ $ Q $ $ \rm{Query} $$ _1 $ $ \rm{Query} $$ _2 $ $ \vdots $ $ \rm{Query} $$ _Q $
Output Format
タイプ $ 2 $ のクエリの個数を $ k $ としたとき、全体で $ k $ 行出力せよ。
そのうち $ i $ 行目には、タイプ $ 2 $ のクエリのうち、先頭から $ i $ 個目のものに対する解答を出力せよ。
Explanation/Hint
### 制約
- 入力は全て整数
- $ 2\ \le\ N\ \le\ 10^5 $
- $ 1\ \le\ Q\ \le\ 10^5 $
- $ 1\ \le\ u\