#include<bits/stdc++.h>
       using namespace std;
       typedef long long ll;
       typedef long double ld;
       template <typename X> ostream& operator << (ostream& x,const vector<X>& v){for(ll i=0;i<v.size();++i) x<<v[i]<<" ";return x;}
       template <typename X> ostream& operator << (ostream& x,const set<X>& v){for(auto it:v) x<<it<<" ";return x;}
       template <typename X, typename Y> ostream& operator << (ostream& x, const pair<X,Y>& v) {x<<v.ff<<" "<<v.ss;return x;}
       template <typename T, typename S> ostream& operator << (ostream& os, const map<T, S>& v) { for (auto it : v) os << it.first << "=>" << it.second << endl; return os; }
       struct pair_hash {inline std::size_t operator()(const std::pair<ll, ll> & v) const {return v.first*31+v.second;}};
       #pragma comment(linker, "/stack:200000000")
       #pragma GCC optimize ("O3")
       #pragma GCC optimize ("unroll-loops")
       #pragma GCC targett("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
       #define speed ios_base::sync_with_stdio(false);cin.tie(NULL)
       #define pb push_back
       #define fr first
       #define sc second
       #define prnt(m) for(auto it = m.begin() ; it != m.end() ; ++it){cout<<*it<<endl;}
       #define tra(it,m) for(auto it=m.begin();it!=m.end();++it)
       #define dbg(x) cout<<#x<<" = "<<x<<'\n';
       #define fri(i,s,n) for(ll i=s;i<n;i++)
       #define mod 1000000007LL
       #define mod2 998244353
       #define vct2 vector<vector<ll>>
       #define vct vector<ll>
       #define pll pair<ll,ll>
       #define rz(n) resize(n)
       #define all(v) vdsd.begin(),v.end()
       #define mkp make_pair
       #define arrin(a,n) for(ll i = 0; i < n ; i++){cin>>a[i];}
       #define arrout(a,n) for(ll i = 0;i < n; i++){cout<<a[i]<<" ";}
       #define ex(s) cout<<s<<endl,exit(0);
       #define inf 4e18
       #define five 100005;
       #define six 1000005;
       #define printclock cerr<<"Time"<<1000*(ld)clock()/(ld)CLOCKS_PER_SEC<<"ms\n";
       //_______________________________________________________________________________________
       const int N = 2*five;
       vector<int> dp[N];
       int dpp[N];

       bool vis[N];
       void dfs(int i)
       {
              vis[i] = true;
              for(int j : dp[i]){
                     if(!vis[j]){
                            dfs(j);
                     }
              }
       }
       int main()
       {
              int n,m;
              cin>>n>>m;
              while(m--)
              {
                     int x,y;
                     cin>>x>>y;
                     dp[x].pb(y);
                     dp[y].pb(x);
              }
              memset(vis,false,sizeof vis);
              dfs(1);
              fri(i,1,n+1){
                     if(!vis[i]){
                            cout<<"No";
                            return 0;
                     }
              }
              cout<<"Yes"<<endl;
              memset(vis,false,sizeof vis);
              queue<pair<int,int>> q;
              q.push({1,0});
              vis[1] = true;
              while(!q.empty())
              {
                     int curr = q.front().fr;
                     int dis = q.front().sc;
                     q.pop();
                     for(int j : dp[curr])
                     {
                            if(!vis[j]){
                                   vis[j] = true;
                                   dpp[j] = curr;
                                   q.push({j,dis+1});
                            }
                     }
              }
              fri(i,1,n){
                     cout<<dpp[i+1]<<endl;
              }
       }


Measured memory_bytes: 16616