from collections import deque



n,m=list(map(int,input().split()))

graph=[[] for _ in range(n)]



for _ in range(m):

  a,b=list(map(int,input().split()))

  graph[a-1].append(b-1)

  graph[b-1].append(a-1)

#print(graph)



dist=[-1]*n

dist[0]=0



queue=deque([0])



while queue:

  v=queue.popleft()

  for nv in graph[v]:

    if (dist[nv]!=-1):

      continue

    dist[nv]=v

    queue.append(nv)



print("Yes")



for i in dist[1:]:

  print((i+1))

  
from collections import deque

n, m = map(int, input().split())

graph = [[] for _ in range(n+1)]



for i in range(m):

  a, b = map(int, input().split())

  graph[a].append(b)

  graph[b].append(a)



#print(graph)



dist = [-1] * (n+1)

dist[0] = 0

dist[1] = 0



d = deque()

d.append(1)



while d: #dの中が空になるまで続ける

  v = d.popleft()#一番最初に入れたものから探索する。

  for i in graph[v]:#vから行けるところを探索。例v=1,i=2, v=2,i=1,3,4

    if dist[i] != -1: #iが未訪問でなければ（=訪問済みであれば）

      continue#何もしない

    dist[i]=v#一個前の探索地点を入れる（一個前がほしいとき）  

#    dist[i] = dist[v] + 1#iのdistにv＋1したものを追加（原点からの距離がほしいとき）

    d.append(i)#訪問リストにiを追加



#print(graph)

#print(dist)

print('Yes')

[print(dist[i]) for i in range(2,n+1)]

from collections import deque

n, m = list(map(int, input().split()))
graph = [[] for _ in range(n)]
for _ in range(m):
    a, b = list(map(int, input().split()))
    graph[a - 1].append(b - 1)
    graph[b - 1].append(a - 1)
# print(graph)
dist = [-1] * n
dist[0] = 0
queue = deque([0])
while queue:
    v = queue.popleft()
    for nv in graph[v]:
        if dist[nv] != -1:
            continue
        dist[nv] = v
        queue.append(nv)
print("Yes")
for i in dist[1:]:
    print((i + 1))

from collections import deque

n, m = map(int, input().split())
graph = [[] for _ in range(n + 1)]
for i in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)
# print(graph)
dist = [-1] * (n + 1)
dist[0] = 0
dist[1] = 0
d = deque()
d.append(1)
while d:  # dの中が空になるまで続ける
    v = d.popleft()  # 一番最初に入れたものから探索する。
    for i in graph[v]:  # vから行けるところを探索。例v=1,i=2, v=2,i=1,3,4
        if dist[i] != -1:  # iが未訪問でなければ（=訪問済みであれば）
            continue  # 何もしない
        dist[i] = v  # 一個前の探索地点を入れる（一個前がほしいとき）
        #    dist[i] = dist[v] + 1#iのdistにv＋1したものを追加（原点からの距離がほしいとき）
        d.append(i)  # 訪問リストにiを追加
# print(graph)
# print(dist)
print("Yes")
[print(dist[i]) for i in range(2, n + 1)]

-n, m = list(map(int, input().split())) -graph = [[] for _ in range(n)] -for _ in range(m): -    a, b = list(map(int, input().split())) -    graph[a - 1].append(b - 1) -    graph[b - 1].append(a - 1) +n, m = map(int, input().split()) +graph = [[] for _ in range(n + 1)] +for i in range(m): +    a, b = map(int, input().split()) +    graph[a].append(b) +    graph[b].append(a) -dist = [-1] * n +dist = [-1] * (n + 1) -queue = deque([0]) -while queue: -    v = queue.popleft() -    for nv in graph[v]: -        if dist[nv] != -1: -            continue -        dist[nv] = v -        queue.append(nv) +dist[1] = 0 +d = deque() +d.append(1) +while d:  # dの中が空になるまで続ける +    v = d.popleft()  # 一番最初に入れたものから探索する。 +    for i in graph[v]:  # vから行けるところを探索。例v=1,i=2, v=2,i=1,3,4 +        if dist[i] != -1:  # iが未訪問でなければ（=訪問済みであれば） +            continue  # 何もしない +        dist[i] = v  # 一個前の探索地点を入れる（一個前がほしいとき） +        #    dist[i] = dist[v] + 1#iのdistにv＋1したものを追加（原点からの距離がほしいとき） +        d.append(i)  # 訪問リストにiを追加 +# print(graph) +# print(dist) -for i in dist[1:]: -    print((i + 1)) +[print(dist[i]) for i in range(2, n + 1)]