#include<bits/stdc++.h>
    #define ll long long
    #define rep(i,a,b) for(i=a;i<b;i++)
    #define pb push_back
    #define all(v) v.begin(),v.end()
    #define F first
    #define S second
    #define vi vector < ll  int >
    #define CLR(a) memset((a),0,sizeof(a))
    #define mp make_pair
    #define hell 1000000007
    using namespace std;

    #define MAXN 1000005
    int spf[MAXN];
    vector < ll > vp;
    void sieve()
    {
        spf[1] = 1;
        for (int i=2; i<MAXN; i++)
            spf[i] = i;
        for (int i=4; i<MAXN; i+=2)
            spf[i] = 2;

        for (int i=3; i*i<MAXN; i++)
        {
            if (spf[i] == i)
            {
                for (int j=i*i; j<MAXN; j+=i)

                    if (spf[j]==j)
                        spf[j] = i;
            }
        }
        for(int i=2;i<=100000;i++)
        {
            if(spf[i]==i) vp.pb(i);
        }
    }


    vector<int> gf(int x)
    {
        vector<int> ret;
        while (x != 1)
        {
            ret.push_back(spf[x]);
            x = x / spf[x];
        }
        return ret;
    }
    int BIT[100050];
    void upd(int x) { ++x;  while(x<=MAXN)  {  BIT[x]++;  x+=(x&-x);  } }
    int cal(int x) {  ++x;  int res=0;  while(x>0)  {  res+=BIT[x];  x-=(x&-x);  } return res; }

    ll mod=hell;
    ll pr( ll x , ll y)
    {
        ll ans=1;
        if(y==0) return ans;
        while(y>1)
        {
            if(y&1) ans*=x;
            x*=x;
            y/=2;
            x%=mod;
            ans%=mod;
        }
        ans*=x;
        ans%=mod;
        return ans;
    }
    ll inv(ll n)
    {
        return pr(n,mod-2);
    }
    ll stoi(string s)
    {
        int n=s.size();
        ll k=0; int i;
        rep(i,0,n)
        {
            k+=s[i]-'0';
            k*=10;
        }
        return k/10;
    }
    string to_string(ll n)
    {  if(!n) return "0";
        string s=""; int a,b;
        while(n>0)
        {
            b=n%10;
            s+=(b+'0');
            n/=10;
        }
        reverse(all(s));
        return s;
    }
  ll invvf[1000500],fact[1000500];
  void pre()
  {
      ll i,j,n=1000050;
      fact[0]=1; fact[1]=1;
      rep(i,2,n) {fact[i]=fact[i-1]*i; fact[i]%=hell;}
      invvf[1]=1; invvf[0]=1;
      rep(i,2,n)
      {
          invvf[i]=inv(fact[i]);
      }

  }
 ll ncr(ll n , ll r)
 {
     ll y=fact[n];
     y*=invvf[r];
     y%=hell;
     y*=invvf[n-r];
     y%=hell;
     return y;
 }


int phi(int n) {
    int result = n;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            while (n % i == 0)
                n /= i;
            result -= result / i;
        }
    }
    if (n > 1)
        result -= result / n;
    return result;
}

 bool fun(string s){
    int one = 0, zero = 0;
    for(int i = s.length() - 1; i >= 0; i--){
		if(s[i] == '0')
			zero++;
		else
			one++;
		if(zero > one)
			return false;
    }
    return true;
}
  ll ck(string s)
  {
      int n=s.size(); int i;
      char ch='9'; char ch2='0';
      rep(i,0,n)
      {
          ch=min(ch,s[i]);
          ch2=max(ch2,s[i]);
      }
      ll a1=ch-'0';
      ll a2=ch2-'0';
      return a1*a2;
  }
  bool okk(string &s,ll val)
{
	map<char,ll>M;

	int i,n=s.size();
	rep(i,0,val)
	{
		M[s[i]]++;
	}
	if(M.size()==3) return true;


	rep(i,val,n)
	{
		M[s[i-val]]--;

		if(M[s[i-val]]==0)
			M.erase(s[i-val]);
		if(M.find(s[i])==M.end())
			M[s[i]]=1;
		else
			M[s[i]]++;

		if(M.size()==3)
			return true;
	}

	if(M.size()==3)
		return true;
		else
	return false;
}
vector < int > g[100500];
ll cnt=0; bool vis[100050];
void dfs(int node)
{
    if(vis[node]==true) return;
    vis[node]=true;
    cnt++;
    for(auto it : g[node]) dfs(it);
}
int level[100050];
int anss[100050];
   void bfs(int node , int par)
   {
      queue < int > q;
      q.push(1);
      while(!q.empty())
      {
          int a=q.front();
          q.pop();
          if(!vis[a]){
              //  cout<<a<<endl;
          vis[a]=true;
          for(auto it :g[a] )
          {
              if(!vis[it])
              {
                  if(level[it]>1+level[a]) {anss[it]=a; level[it]=1+level[a];}
                //  cout<<it<<" "<<level[it]<<endl;
                  q.push(it);
              }

          }}

      // cout<<endl;
      }

   }
    void solve()
    {
    long long  i,j=0,r=200,p,q,k=0,d,y=0,n,h=100000000000000,flag=0,m=0,a=hell,b=hell,id,h1,h2,a1,b1,a2,w,x,u,f,l,c=0,e,ans=1e9;
    cin>>n>>m;
    memset(vis,false,sizeof(vis));
    rep(i,0,m)
    {
        cin>>a>>b;
        g[a].pb(b);
        g[b].pb(a);
    }
    dfs(1);
    if(cnt!=n)
    {
        cout<<"No"; return;
    }
    cout<<"Yes\n";
     memset(vis,false,sizeof(vis));
     level[1]=0;
     rep(i,2,n+5) level[i]=n+1;
     bfs(1,-1);

     rep(i,1,n) cout<<anss[i+1]<<endl;


}

    signed main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        int t=1;
        //sieve();
       // pre();
        //cin>>t;
        while(t--)
        solve();
    }


Measured memory_bytes: 13136