# ダミーノード'0'を設定 ※※※

# AtCoder Beginner Contest 168

# https://atcoder.jp/contests/abc168/tasks/abc168_d



import sys

input = sys.stdin.readline



n, m =  list(map(int, input().split())) # nは頂点の数、mは辺の数

pic = [[] for _ in range(n+1)] # 隣接リスト_初期化 ※※※



for _ in range(m): # 隣接リスト_取り込み

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

    pic[a].append(b) # ※※※

    pic[b].append(a) # ※※※



from collections import deque



def BFS(u): # 'u'を開始位置として各頂点までの距離を探索する関数_dis → 親ノードを探索して'ans'に記録

    queue = deque([u]) # dequeオブジェクトとして初期化、初期値は開始位置の'u'のみ

    dis = [None] * (n+1) # uからの距離を全ノード分初期化 ※※※

    dis[u] = 0 # 開始位置'u'の距離は'0'

    ans = [-1] * (n+1) # 親ノードを記録する

    while queue:

        v = queue.popleft() # 'v'に探索候補のノードを popleft

        for i in pic[v]: # pic[v]: 探索候補のノードに隣接するノードのリスト

            if ans[i] == -1: # 親ノードを記録

                ans[i] = v

            if dis[i] is None:

                dis[i] = dis[v]

                queue.append(i)

    return ans



tmp = BFS(1) # ここは開始位置'1'

print('Yes')

for j in tmp[2:]:

    print(j) # ※※※

# ダミーノード'0'を設定 ※※※

# AtCoder Beginner Contest 168

# https://atcoder.jp/contests/abc168/tasks/abc168_d



import sys

input = sys.stdin.readline



n, m =  list(map(int, input().split())) # nは頂点の数、mは辺の数

pic = [[] for _ in range(n+1)] # 隣接リスト_初期化 ※※※



for _ in range(m): # 隣接リスト_取り込み

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

    pic[a].append(b) # ※※※

    pic[b].append(a) # ※※※

#print(pic)



from collections import deque



def BFS(u): # 'u'を開始位置として各頂点までの距離を探索する関数_dis → 親ノードを探索して'ans'に記録

    queue = deque([u]) # dequeオブジェクトとして初期化、初期値は開始位置の'u'のみ

    dis = [None] * (n+1) # uからの距離を全ノード分初期化 ※※※

    dis[u] = 0 # 開始位置'u'の距離は'0'

    ans = [-1] * (n+1) # 親ノードを記録する

    while queue:

        v = queue.popleft() # 'v'に探索候補のノードを popleft

        for i in pic[v]: # pic[v]: 探索候補のノードに隣接するノードのリスト

            if ans[i] == -1: # 親ノードを記録

                ans[i] = v

            if dis[i] is None:

                dis[i] = dis[v] + 1 # 'u'からの距離を記録

                queue.append(i)

    #print(ans)

    #print(dis)

    return ans



print('Yes')



tmp = BFS(1) # ここは開始位置'1'



for j in tmp[2:]:

    print(j) # ※※※

# ダミーノード'0'を設定 ※※※
# AtCoder Beginner Contest 168
# https://atcoder.jp/contests/abc168/tasks/abc168_d
import sys

input = sys.stdin.readline
n, m = list(map(int, input().split()))  # nは頂点の数、mは辺の数
pic = [[] for _ in range(n + 1)]  # 隣接リスト_初期化 ※※※
for _ in range(m):  # 隣接リスト_取り込み
    a, b = list(map(int, input().split()))
    pic[a].append(b)  # ※※※
    pic[b].append(a)  # ※※※
from collections import deque


def BFS(u):  # 'u'を開始位置として各頂点までの距離を探索する関数_dis → 親ノードを探索して'ans'に記録
    queue = deque([u])  # dequeオブジェクトとして初期化、初期値は開始位置の'u'のみ
    dis = [None] * (n + 1)  # uからの距離を全ノード分初期化 ※※※
    dis[u] = 0  # 開始位置'u'の距離は'0'
    ans = [-1] * (n + 1)  # 親ノードを記録する
    while queue:
        v = queue.popleft()  # 'v'に探索候補のノードを popleft
        for i in pic[v]:  # pic[v]: 探索候補のノードに隣接するノードのリスト
            if ans[i] == -1:  # 親ノードを記録
                ans[i] = v
            if dis[i] is None:
                dis[i] = dis[v]
                queue.append(i)
    return ans


tmp = BFS(1)  # ここは開始位置'1'
print("Yes")
for j in tmp[2:]:
    print(j)  # ※※※

# ダミーノード'0'を設定 ※※※
# AtCoder Beginner Contest 168
# https://atcoder.jp/contests/abc168/tasks/abc168_d
import sys

input = sys.stdin.readline
n, m = list(map(int, input().split()))  # nは頂点の数、mは辺の数
pic = [[] for _ in range(n + 1)]  # 隣接リスト_初期化 ※※※
for _ in range(m):  # 隣接リスト_取り込み
    a, b = list(map(int, input().split()))
    pic[a].append(b)  # ※※※
    pic[b].append(a)  # ※※※
# print(pic)
from collections import deque


def BFS(u):  # 'u'を開始位置として各頂点までの距離を探索する関数_dis → 親ノードを探索して'ans'に記録
    queue = deque([u])  # dequeオブジェクトとして初期化、初期値は開始位置の'u'のみ
    dis = [None] * (n + 1)  # uからの距離を全ノード分初期化 ※※※
    dis[u] = 0  # 開始位置'u'の距離は'0'
    ans = [-1] * (n + 1)  # 親ノードを記録する
    while queue:
        v = queue.popleft()  # 'v'に探索候補のノードを popleft
        for i in pic[v]:  # pic[v]: 探索候補のノードに隣接するノードのリスト
            if ans[i] == -1:  # 親ノードを記録
                ans[i] = v
            if dis[i] is None:
                dis[i] = dis[v] + 1  # 'u'からの距離を記録
                queue.append(i)
    # print(ans)
    # print(dis)
    return ans


print("Yes")
tmp = BFS(1)  # ここは開始位置'1'
for j in tmp[2:]:
    print(j)  # ※※※

+# print(pic) -                dis[i] = dis[v] +                dis[i] = dis[v] + 1  # 'u'からの距離を記録 +    # print(ans) +    # print(dis) +print("Yes") -print("Yes")