AT_past202005_i 行列操作
Description
[problemUrl]: https://atcoder.jp/contests/past202005-open/tasks/past202005_i
以下の条件を満たすような $ N\ \times\ N $ 行列 $ a $ があります。
- $ a_{i,j}\ =\ N\ \times\ (i\ -\ 1)\ +\ j\ -\ 1 $ ($ 1\ \leq\ i,j\ \leq\ N $)
$ Q $ 個のクエリ $ Query_{1},\ \ldots,\ Query_{Q} $ が与えられるので、順番に処理してください。 クエリは $ 4 $ 種類あり、入力形式とクエリの内容は以下の通りです。
- $ Query_{i}\ = $ `1 A B` のとき: 行列 $ a $ の $ A $ 行目と $ B $ 行目の要素を列番号を維持しながら交換せよ。
- $ Query_{i}\ = $`2 A B` のとき: 行列 $ a $ の $ A $ 列目と $ B $ 列目の要素を行番号を維持しながら交換せよ。
- $ Query_{i}\ = $`3` のとき: 行列を転置せよ。つまり $ a_{i,j} $ の要素は転置後 $ a_{j,i} $ に位置する。
- $ Query_{i}\ = $`4 A B` のとき: 行列 $ a $ の $ A $ 行 $ B $ 列に位置する要素を出力せよ。
ただし、$ 1 $ 番目と $ 2 $ 番目の種類のクエリにおいて $ A=B $ であったとき、クエリを処理したあとの行列は処理する前と同じであることに注意してください。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ Q $ $ Query_{1} $ $ Query_{2} $ $ \vdots $ $ Query_{Q} $
Output Format
`4 A B` という形式のクエリに対する答えを、クエリが与えられた順にそれぞれ $ 1 $ 行ずつ整数で出力せよ。 答えは $ 32 $ ビット整数に収まらない可能性があることに注意せよ。
Explanation/Hint
### 注意
この問題に対する言及は、2020/6/6 18:00 JST まで禁止されています。言及がなされた場合、賠償が請求される可能性があります。 試験後に総合得点や認定級を公表するのは構いませんが、どの問題が解けたかなどの情報は発信しないようにお願いします。
### 制約
- 入力は全て整数
- $ 1\ \leq\ N,\ Q\ \leq\ 10^{5} $
- $ 1\ \leq\ A,\ B\ \leq\ N $
- `4 A B` という形式のクエリが $ 1 $ つ以上存在する
### Sample Explanation 1
入力例 $ 1 $ では、各操作後の行列のそれぞれの要素の値を確かめることができます。