# import sys

# import math #sqrt,gcd,pi

# import decimal

import queue # queue

# import bisect

# import heapq # priolity-queue

# import time

# from itertools import product,permutations,\

#     combinations,combinations_with_replacement

# 重複あり順列、順列、組み合わせ、重複あり組み合わせ

# import collections # deque

# from operator import itemgetter,mul

# from fractions import Fraction

# from functools import reduce



# mod = int(1e9+7)

mod = 998244353

INF = 1<<29

lINF = 1<<35



def readInt():

    return list(map(int,input().split()))



def main():

    n,m = readInt()

    g = [[] for i in range(n)]

    for i in range(m):

        x,y = readInt()

        g[x-1].append(y-1)

        g[y-1].append(x-1)

    v = [[-1,-1] for i in range(n)]

    v[0] = [0,0]

    q = queue.Queue()

    q.put(0)

    while not q.empty():

        x = q.get()

        for y in g[x]:

            if v[y][0]!=(-1):

                continue

            q.put(y)

            v[y][0] = v[x][0] + 1

            v[y][1] = x

    print("Yes")

    for i in range(1,n):

        print((v[i][1]+1))

    return



if __name__=='__main__':

    main()

# import sys

# import math #sqrt,gcd,pi

# import decimal

import queue # queue

# import bisect

# import heapq # priolity-queue

# import time

# from itertools import product,permutations,\

#     combinations,combinations_with_replacement

# 重複あり順列、順列、組み合わせ、重複あり組み合わせ

# import collections # deque

# from operator import itemgetter,mul

# from fractions import Fraction

# from functools import reduce



# mod = int(1e9+7)

mod = 998244353

INF = 1<<29

lINF = 1<<35



def readInt():

    return list(map(int,input().split()))



def main():

    n,m = readInt()

    # インデックスを部屋番号として、各部屋から繋がっている部屋の番号をリストに持つ

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

    for i in range(m):

        x,y = readInt()

        graph[x-1].append(y-1)

        graph[y-1].append(x-1)

    # 各部屋に設定する番号を記録する

    v = [-1 for i in range(n)]

	# 部屋1は -1 以外にしておく

    v[0] = [0]

    # queueを作成し部屋1（インデックスは0）を入れる

    q = queue.Queue()

    q.put(0)

    while not q.empty():

      	# queueの先頭（今いる部屋の番号）を取り出す

        x = q.get()

        # 今いる部屋と繋がっている部屋を順に探索する

        for y in graph[x]:

          	# -1ではない場合は既に探索済みなのでスキップする

            if v[y]!=(-1):

                continue

            # あとで探索する為にqueueに入れておく

            q.put(y)

            v[y] = x

    print("Yes")

    for i in range(1,n):

        print((v[i]+1))

    return



if __name__=='__main__':

    main()

# import sys
# import math #sqrt,gcd,pi
# import decimal
import queue  # queue

# import bisect
# import heapq # priolity-queue
# import time
# from itertools import product,permutations,\
#     combinations,combinations_with_replacement
# 重複あり順列、順列、組み合わせ、重複あり組み合わせ
# import collections # deque
# from operator import itemgetter,mul
# from fractions import Fraction
# from functools import reduce
# mod = int(1e9+7)
mod = 998244353
INF = 1 << 29
lINF = 1 << 35


def readInt():
    return list(map(int, input().split()))


def main():
    n, m = readInt()
    g = [[] for i in range(n)]
    for i in range(m):
        x, y = readInt()
        g[x - 1].append(y - 1)
        g[y - 1].append(x - 1)
    v = [[-1, -1] for i in range(n)]
    v[0] = [0, 0]
    q = queue.Queue()
    q.put(0)
    while not q.empty():
        x = q.get()
        for y in g[x]:
            if v[y][0] != (-1):
                continue
            q.put(y)
            v[y][0] = v[x][0] + 1
            v[y][1] = x
    print("Yes")
    for i in range(1, n):
        print((v[i][1] + 1))
    return


if __name__ == "__main__":
    main()

# import sys
# import math #sqrt,gcd,pi
# import decimal
import queue  # queue

# import bisect
# import heapq # priolity-queue
# import time
# from itertools import product,permutations,\
#     combinations,combinations_with_replacement
# 重複あり順列、順列、組み合わせ、重複あり組み合わせ
# import collections # deque
# from operator import itemgetter,mul
# from fractions import Fraction
# from functools import reduce
# mod = int(1e9+7)
mod = 998244353
INF = 1 << 29
lINF = 1 << 35


def readInt():
    return list(map(int, input().split()))


def main():
    n, m = readInt()
    # インデックスを部屋番号として、各部屋から繋がっている部屋の番号をリストに持つ
    graph = [[] for i in range(n)]
    for i in range(m):
        x, y = readInt()
        graph[x - 1].append(y - 1)
        graph[y - 1].append(x - 1)
    # 各部屋に設定する番号を記録する
    v = [-1 for i in range(n)]
    # 部屋1は -1 以外にしておく
    v[0] = [0]
    # queueを作成し部屋1（インデックスは0）を入れる
    q = queue.Queue()
    q.put(0)
    while not q.empty():
        # queueの先頭（今いる部屋の番号）を取り出す
        x = q.get()
        # 今いる部屋と繋がっている部屋を順に探索する
        for y in graph[x]:
            # -1ではない場合は既に探索済みなのでスキップする
            if v[y] != (-1):
                continue
            # あとで探索する為にqueueに入れておく
            q.put(y)
            v[y] = x
    print("Yes")
    for i in range(1, n):
        print((v[i] + 1))
    return


if __name__ == "__main__":
    main()

-    g = [[] for i in range(n)] +    # インデックスを部屋番号として、各部屋から繋がっている部屋の番号をリストに持つ +    graph = [[] for i in range(n)] -        g[x - 1].append(y - 1) -        g[y - 1].append(x - 1) -    v = [[-1, -1] for i in range(n)] -    v[0] = [0, 0] +        graph[x - 1].append(y - 1) +        graph[y - 1].append(x - 1) +    # 各部屋に設定する番号を記録する +    v = [-1 for i in range(n)] +    # 部屋1は -1 以外にしておく +    v[0] = [0] +    # queueを作成し部屋1（インデックスは0）を入れる +        # queueの先頭（今いる部屋の番号）を取り出す -        for y in g[x]: -            if v[y][0] != (-1): +        # 今いる部屋と繋がっている部屋を順に探索する +        for y in graph[x]: +            # -1ではない場合は既に探索済みなのでスキップする +            if v[y] != (-1): +            # あとで探索する為にqueueに入れておく -            v[y][0] = v[x][0] + 1 -            v[y][1] = x +            v[y] = x -        print((v[i][1] + 1)) +        print((v[i] + 1))