AT_abc470_d [ABC470D] Inverse and Swap
Description
$ (1, \dots, N) $ の順列 $ P = (P_1, \dots, P_N) $ が与えられます。
$ Q $ 個のクエリを順に処理してください。クエリは以下の $ 2 $ 種類です。
- `1 x y`: $ P_x $ と $ P_y $ の値を入れ替える。
- `2`: 以下の条件を満たす $ (1, \dots, N) $ の順列 $ P' = (P'_1, \dots, P'_N) $ を作り、 $ P_1, \dots, P_N $ の値をそれぞれ $ P'_1, \dots, P'_N $ で置き換える。(条件を満たす $ P' $ は一意に存在することが示せる。)
- $ 1 \leq i \leq N $ を満たすどの整数 $ i $ についても、 $ P_{P'_i} = i $ を満たす。
すべてのクエリを処理したあとの $ P_1, \dots, P_N $ の値を出力してください。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ Q $ $ P_1 $ $ P_2 $ $ \cdots $ $ P_N $ $ \mathrm{query}_1 $ $ \vdots $ $ \mathrm{query}_Q $
ここで、 $ \mathrm{query}_q $ は $ q $ 番目のクエリを表し、以下の $ 2 $ 種類のいずれかの形式で与えられる。
> $ 1 $ $ x $ $ y $
> $ 2 $
Output Format
すべてのクエリを処理したあとの $ P_1, \dots, P_N $ の値を、空白区切りで $ 1 $ 行に出力せよ。
Explanation/Hint
### Sample Explanation 1
各クエリを処理した時点で、 $ P_1, \dots, P_N $ の値は以下のようになります。
- $ 1 $ 番目のクエリを処理した時点で、 $ P = (2,5,3,1,4) $
- $ 2 $ 番目のクエリを処理した時点で、 $ P = (4,1,3,5,2) $
- $ 3 $ 番目のクエリを処理した時点で、 $ P = (4,3,1,5,2) $
- $ 4 $ 番目のクエリを処理した時点で、 $ P = (4,3,5,1,2) $
- $ 5 $ 番目のクエリを処理した時点で、 $ P = (4,5,2,1,3) $
### Constraints
- $ 2 \leq N \leq 5 \times 10^5 $
- $ 1 \leq Q \leq 5 \times 10^5 $
- $ (P_1, \dots, P_N) $ は $ (1, \dots, N) $ の順列
- 種類 $ 1 $ のクエリにおいて、 $ 1 \leq x < y \leq N $
- 入力される値はすべて整数