#include <bits/stdc++.h>
using namespace std;
#define _USE_MATH_DEFINES
#include <cmath>
// long long mod=180143987779;
// vector<long long > t(4*100001);
// long long gcd(long long a,long long b)
// {
//   if(b>a)
//   {
//     return gcd(b,a);
//   }
//   if(b==0)
//   {
//     return a;
//   }
//   else
//   {
//     return gcd(b,a%b);
//   }
// }
class comp{
public:
    bool operator()(pair<long long ,long long > a,pair<long long ,long long > b)
{
  if(a.first>b.first)
  {
    return false;
  }
  else if(a.first==b.first && a.second<b.second)
  {
    return false;
  }
  else
  {
    return true;
  }
 }
};
// void buildseg(long long  x,long long  l,long long  r,vector<long long > &a,long long  modi)
// {
//   if(l==r)
//   {
//     t[x]=a[l]%modi;
//   }
//   else
//   {
//     long long  mid=(l+r)/2;
//     buildseg(2*x+1,l,mid,a,modi);
//     buildseg(2*x+2,mid+1,r,a,modi);
//     t[x]=(t[2*x+1]+t[2*x+2])%modi;
//   }
// }
// long long  sum(long long  x,long long  l1,long long  r1,long long  l,long long  r,long long  modi)
// {
//   if(l>r)
//   {
//     return 0;
//   }
//   else if(l1==l && r1==r)
//   {
//     return t[x];
//   }
//   else
//   {
//     long long  mid=(l1+r1)/2;
//     return (sum(2*x+1,l1,mid,l,min(r,mid),modi)+sum(2*x+2,mid+1,r1,max(l,mid+1),r,modi))%modi;
//   }
// }
// void update(long long  x,long long  l,long long  r,long long  value,long long  pos,long long  modi)
// {
//   if(l==r)
//   {
//     t[x]=value%modi;
//   }
//   else
//   {
//     long long  mid=(l+r)/2;
//     if(mid>=pos)
//     {
//       update(2*x+1,l,mid,value,pos,modi);
//     }
//     else
//     {
//         update(2*x+2,mid+1,r,value,pos,modi);
//     }
//     t[x]=(t[2*x+1]+t[2*x+2])%modi;
//   }
// }
// void prdoubleseg(long long  n)
// {
//   for(long long  i=0;i<4*n;i++)
//   {
//     cout<<t[i]<<" ";
//   }
//   cout<<endl;
// }
// void dfs(double x,  vector<vector<double> > &adj,vector<set<double> > &v,double &count,vector<double> &vis)
// {
//   v[x].insert(count);
//   vis[x]=1;
//   for(auto i : adj[x])
//   {
//     if(vis[i]==0)
//     {
//       vis[i]=1;
//       dfs(i,adj,v,count,vis);
//     }
//   }
// }
void bfs(int s,vector<vector<int> > adj,vector<int> &vis,vector<int> &pred)
  {
    queue<int> q;
    q.push(s);
    vis[s]=1;
    while(!q.empty())
    {
      int j=q.front();
      q.pop();
    //  cout<<j<<" ";
      for(auto i:adj[j])
      {
        if(vis[i]==0)
        {
          q.push(i);
          pred[i]=j;
          vis[i]=1;
        }
      }
    }
  }
// long long  diff(long long  a ,long long  b,long long  c)
// {
//   long long  q=min(a,b);
//   q=min(q,c);
//   long long  w=max(a,b);
//   w=max(w,c);
//   return (w-q);
// }
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long T;
  T=1;
  while(T--)
  {
   int n,m;
   cin>>n>>m;
   vector<vector<int> > adj(n);
   while(m--)
    {
      int u,v;
      cin>>u>>v;
      u--;
      v--;
      adj[u].push_back(v);
      adj[v].push_back(u);
    }
    vector<int> vis(n,0);
    vector<int> pred(n);
    bfs(0,adj,vis,pred);
    int count=0;
    for(int i=0;i<n;i++)
    {
      if(vis[i]==0)
      {
        count=1;
        break;
      }
    }
    if(count==1)
    {
      cout<<"No"<<endl;
    }
    else
    {
      cout<<"Yes"<<endl;
      for(int i=1;i<n;i++)
      {
        cout<<pred[i]+1<<endl;
      }
    }

  }
   return 0;
}


Measured memory_bytes: 16480