atcoder#ABC168D. [ABC168D] .. (Double Dots)

[ABC168D] .. (Double Dots)

配点: 400400

問題文

あるところに、洞窟があります。

洞窟には NN 個の部屋と MM 本の通路があり、部屋には 11 から NN の、通路には 11 から MM の番号がついています。通路 ii は部屋 AiA_i と部屋 BiB_i を双方向につないでいます。どの 22 部屋間も、通路をいくつか通って行き来できます。部屋 11 は洞窟の入り口がある特別な部屋です。

洞窟の中は薄暗いので、部屋 11 以外の各部屋に 11 つずつ道しるべを設けることにしました。各部屋の道しるべは、その部屋と通路で直接つながっている部屋の 11 つを指すように置きます。

洞窟の中は危険なので、部屋 11 以外のどの部屋についても以下の条件を満たすことが目標です。

  • その部屋から出発し、「いまいる部屋にある道しるべを見て、それが指す部屋に移動する」ことを繰り返すと、部屋 11 に最小の移動回数でたどり着く。

目標を達成できる道しるべの配置が存在するか判定し、存在するならばそのような配置を 11 つ出力してください。

制約

  • 入力はすべて整数
  • 2N1052 \leq N \leq 10^5
  • 1M2×1051 \leq M \leq 2 \times 10^5
  • 1Ai,BiN (1iM)1 \leq A_i, B_i \leq N\ (1 \leq i \leq M)
  • AiBi (1iM)A_i \neq B_i\ (1 \leq i \leq M)
  • どの 22 部屋間も、通路をいくつか通って行き来できる

入力

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

NN MM

A1A_1 B1B_1

::

AMA_M BMB_M

出力

目標を達成できる道しるべの配置が存在しなければ No を出力せよ。

存在する場合、NN 行出力せよ。11 行目には Yes を、i (2iN)i\ (2 \leq i \leq N) 行目には部屋 ii の道しるべが指す部屋の番号を出力せよ。

4 4
1 2
2 3
3 4
4 2
Yes
1
2
2

出力例のように道しるべを置いたとき、

  • 部屋 22 から出発した場合 (2)1(2) \to 111 回移動することになり、これが最小です。
  • 部屋 33 から出発した場合 (3)21(3) \to 2 \to 122 回移動することになり、これが最小です。
  • 部屋 44 から出発した場合 (4)21(4) \to 2 \to 122 回移動することになり、これが最小です。

したがって、出力例のように道しるべを置けば目標を達成できます。

6 9
3 4
6 1
2 4
5 3
4 6
1 5
6 2
4 5
5 6
Yes
6
5
5
1
1

答えが複数あり得る場合、どれを出力してもかまいません。