#include <bits/stdc++.h>
#include <cstdlib>
#include <cmath>
using namespace std;
using ll = long long;
using P = pair<int,int>;
using graph= vector<vector<int>>; 
#define rep(i,n) for (ll i=0; i < (n); ++i)
#define rep2(i,n,m) for(ll i=n;i<=m;i++)
#define rep3(i,n,m) for(ll i=n;i>=m;i--)
#define pb push_back
#define eb emplace_back
const ll INF=1e18 ;
inline void chmax(ll& a,ll b){a=max(a,b);}
inline void chmin(ll& a,ll b){a=min(a,b);}
int main(){
  int n,m ;
  cin >>n>> m ;
  graph g(n) ;//nは頂点数
  rep(i,m){
  int a,b ;
  cin>> a>> b;
  a--;b--;
  g[a].pb(b) ;
  g[b].pb(a) ;
  }
 //ここからbfs
 
 vector<int> dist(n,-1) ; n全て-1
 queue<int> q ;
  dist[0] =0 ;通った頂点０との距離を記録
  q.push(0) ;
  すたーと
  while(!q.empty()){ //qが空になるまで
  int v=que.front() ;
      que.pop() ;出して記録してすぐ消す

      for(int u:g[v]){
        if(dist[u]!=-1) continue;//無視
        dist[u]=v;//親を記録
        
        queue.push(u) ;
　　　　　
      }
  }
   //全部の距離がdistに記録済み

    cout <<"Yes"<<endl;
    rep(i,n) cout<<dist[i]<<endl ;
    return 0;
}