import qualified Data.IntMap as M

main = do
 li <- getLine
 let [n,m] = map read $ words li
 co <- getContents
 let abs = map (l2p . map read . words) $ lines co
 let ans = compute n m abs
 putStrLn "Yes"
 sequence_ $ map print ans

l2p [a,b] = (a,b)

{-
1番から始めて、距離1で行ける部屋をマークしていくだけに見える。
loop as bm cnt
- as 次に調べるべき部屋番号リスト
- bm 既に判っている部屋の答え 2..n が完成したら終わり
- cnt 残りの部屋数 0になったら終わり
-}

compute :: Int -> Int -> [(Int,Int)] -> [Int]
compute n m abs = tail $ M.elems ans
  where
    gr = M.fromListWith (++) [p | (a,b) <- abs, p <- [(a,[b]),(b,[a])]]
    ans = loop [1] (M.singleton 1 1) (n-1)
    loop _ bm 0 = bm
    loop as bm cnt = loop (M.keys bmd) (bm `M.union` bmd) (cnt - M.size bmd)
      where
        bmd = M.fromList [(b, a) | a <- as, b <- gr M.! a, M.notMember b bm]
