atcoder#ABC225D. [ABC225D] Play Train

[ABC225D] Play Train

配点 : 400400

問題文

高橋君は電車のおもちゃを連結させたり分離させたりして遊んでいます。 電車は NN 個あり、電車 11 、電車 22\ldots 、電車 NN と名前がついています。 はじめ電車どうしは連結しておらず全てバラバラです。

クエリが QQ 個与えられるので、与えられた順番に処理してください。 クエリは次の 33 種類のいずれかです。

  • 1 x y :電車 xx の後部と、電車 yy の前部を連結させる。 以下のことが保証されます。
    • xyx \neq y
    • クエリを処理する直前に、電車 xx の後部と連結している電車は存在しない
    • クエリを処理する直前に、電車 yy の前部と連結している電車は存在しない
    • クエリを処理する直前に、電車 xx と電車 yy は異なる連結成分に属する
  • 2 x y :電車 xx の後部と、電車 yy の前部を分離させる。 以下のことが保証されます。
    • xyx \neq y
    • クエリを処理する直前に、電車 xx の後部と電車 yy の前部は直接連結している
  • 3 x :電車 xx が含まれる連結成分に属する電車の番号を、先頭から順番に全て出力する。

制約

  • 2N1052 \leq N \leq 10^5
  • 1Q1051 \leq Q \leq 10^5
  • 1xN1 \leq x \leq N
  • 1yN1 \leq y \leq N
  • 入力は全て整数
  • クエリは全て問題文の条件を満たす
  • 3 x の形式のクエリで出力する電車の番号の個数の合計は 10610^6 以下

入力

入力は以下の形式で標準入力から与えられる。

NN QQ

query1\mathrm{query}_1

query2\mathrm{query}_2

\vdots

queryQ\mathrm{query}_Q

ii 番目のクエリ queryi\mathrm{query}_i では、まずクエリの種類 cic_i1,2,31, 2, 3 のいずれか)が与えられる。 ci=1,2c_i = 1,2 の場合は x,yx,y が追加で与えられ、ci=3c_i =3 の場合は xx が追加で与えられる。

すなわち、各クエリは以下に示す 33 つの形式のいずれかである。

11 xx yy

22 xx yy

33 xx

出力

ある ci=3c_i = 3 のタイプのクエリにおいて、出力すべき値が j1,j2,,jMj_1, j_2, \ldots , j_M であるとする。 このとき以下の形式で 11 行に出力せよ。

MM j1j_1 j2j_2 \ldots jMj_M

ci=3c_i = 3 のタイプのクエリの数を qq として、qq 行出力せよ。 k(1kq)k (1 \leq k \leq q) 行目では kk 番目のそのようなクエリに対する答えを出力せよ。

7 14
1 6 3
1 4 1
1 5 2
1 2 7
1 3 5
3 2
3 4
3 6
2 3 5
2 4 1
1 1 5
3 2
3 4
3 6
5 6 3 5 2 7
2 4 1
5 6 3 5 2 7
4 1 5 2 7
1 4
2 6 3

query5\mathrm{query}_5 まで処理した時、電車は以下のようになっています。 この時、たとえば電車 22 は、電車 3,5,6,73,5,6,7 と同じ連結成分に属していますが、電車 1,41,4 とは同じ連結成分に属していません。

query11\mathrm{query}_{11} まで処理した時、電車は以下のようになっています。