output_description: If there is no way to place signposts satisfying the objective, print `No`.
  
  Otherwise, print N lines. The first line should contain `Yes`, and the i-th
  line (2 \leq i \leq N) should contain the integer representing the room
  indicated by the signpost in Room i.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      A_1 B_1
      :
      A_M B_M
attempt: # ダイクストラ法で部屋1から各部屋への最短経路を出す
  import queue
  
  n, m = list(map(int, input().split()))
  edges = [list(map(int, input().split())) for _ in range(m)]
  
  # 隣接行列の作成
  edges_dict = {}
  for edge in edges:
      a, b = edge
  
      if a not in edges_dict:
          edges_dict[a] = [b]
      else:
          edges_dict[a].append(b)
  
      if b not in edges_dict:
          edges_dict[b] = [a]
      else:
          edges_dict[b].append(a)
  
  # 定数
  COST = 1
  INF = 1e10
  
  # i=0は未使用, i>0は部屋iへの最短距離
  dist_list = [INF] * (n + 1)
  # i=0は未使用, i>0は部屋iの最短経路がたどる次の部屋 = 道しるべ
  prev_list = [None] * (n + 1)
  q = queue.PriorityQueue()
  
  # 初期化
  q.put((0, 1))  # (最短経路, 部屋番号)
  dist_list[1] = 0
  prev_list[1] = 1
  
  while not q.empty():
      min_dist, v = q.get()
      # print("min_dist={}, v={}".format(min_dist, v))
  
      if dist_list[v] < min_dist:
          # print("waste")
          continue
  
      # print("check edges: ", edges_dict[v])
      for w in edges_dict[v]:
          cost = dist_list[v] + COST
          if dist_list[w] > cost:
              # print("push path {} -> {}; cost {}; path {}".format(v, w, cost, prev_list[v]))
              dist_list[w] = cost
              prev_list[w] = v  # prev_list[v]
              q.put((cost, w))
  
  print("Yes")
  # print(edges_dict)
  # print(dist_list)
  # print(prev_list)
  for v in prev_list[2:]:
      print(v)
  
problem_description: Statement
  
  There is a cave.
  
  The cave has N rooms and M passages. The rooms are numbered 1 to N, and the
  passages are numbered 1 to M. Passage i connects Room A_i and Room B_i
  bidirectionally. One can travel between any two rooms by traversing passages.
  Room 1 is a special room with an entrance from the outside.
  
  It is dark in the cave, so we have decided to place a signpost in each room
  except Room 1. The signpost in each room will point to one of the rooms
  directly connected to that room with a passage.
  
  Since it is dangerous in the cave, our objective is to satisfy the condition
  below for each room except Room 1.
  
    * If you start in that room and repeatedly move to the room indicated by the signpost in the room you are in, you will reach Room 1 after traversing the minimum number of passages possible.
  
  Determine whether there is a way to place signposts satisfying our objective,
  and print one such way if it exists.
samples: [{"input": "4 4\n    1 2\n    2 3\n    3 4\n    4 2", "output": "Yes\n    1\n    2\n    2\n    \n\nIf we place the signposts as described in the sample output, the following\nhappens:\n\n  * Starting in Room 2, you will reach Room 1 after traversing one passage: (2) \\to 1. This is the minimum number of passages possible.\n  * Starting in Room 3, you will reach Room 1 after traversing two passages: (3) \\to 2 \\to 1. This is the minimum number of passages possible.\n  * Starting in Room 4, you will reach Room 1 after traversing two passages: (4) \\to 2 \\to 1. This is the minimum number of passages possible.\n\nThus, the objective is satisfied.\n\n* * *"}, {"input": "6 9\n    3 4\n    6 1\n    2 4\n    5 3\n    4 6\n    1 5\n    6 2\n    4 5\n    5 6", "output": "Yes\n    6\n    5\n    5\n    1\n    1\n    \n\nIf there are multiple solutions, any of them will be accepted."}]