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 $ - 入力される値はすべて整数