#include <bits/stdc++.h>
using namespace std;
typedef long long lli;
typedef long double lld;
#define mod 1000000007
#define mod2 998244353
#define fori(n) for (int i = 0; i < n; i++)
#define forj(n) for (int j = 0; j < n; j++)
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define fast ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define endl "\n"
#define sortvec(a) sort(a.begin(), a.end())
#define watch(x) cerr << "\n" << (#x) << " is " << (x) << endl
#define cerr if(true)cerr

template <typename T, typename U>
ostream &operator<<(ostream &out, const pair<T, U> &p)
{
    out << "(" << p.first << ", " << p.second << ")";
    return out;
}
template <template <typename, typename...> class ContainerType, typename ValueType, typename... Args>
void print(const ContainerType<ValueType, Args...> &c)
{
    for (const auto &v : c)
        cout << v << ' ';
    cout << '\n';
}

void print() { cout << '\n'; }
template <typename T, typename... Args>
void print(T a, Args... args)
{
    cout << a << " ";
    print(args...);
}

lli llipower(lli x, lli y, lli p = LLONG_MAX)
{
    lli res = 1;
    x = x % p;
    while (y > 0)
    {
        if (y & 1) res = (res * x) % p;
        y = y >> 1;
        x = (x * x) % p;
    }
    return res;
}
lli binarySearch(vector<int> arr, int l, int r, int x)
{
    if (r >= l)
    {
        lli mid = l + (r - l) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binarySearch(arr, l, mid - 1, x);
        return binarySearch(arr, mid + 1, r, x);
    }
    return -1;
}

//---------------------------------------------------------------------------------

int main()
{
    // int t,tt;
    // cin >> t;
    // tt=t;
    // while (t--)
    // {
    //     int n;
    //     cin>>n;
    //     vector<int> a(n);
    //     fori(n) cin>>a[i];
    //     vector<int> pref(n+1,0);
    //     int sumv=0;
    //     fori(n){
    //         sumv+=a[i];
    //         pref[i+1]=sumv;
    //     }
    //     vector<int> sqs;
    //     fori(10000){
    //         if(i*i<=10000099) sqs.pb(i*i);
    //     }
    //     int curr;
    //     int ans=0;
    //     for(int i=1;i<=n;i++){
    //         curr=pref[i];
    //         for(auto j:sqs){
    //             if(binarySearch(pref,0,n,pref[i]-j)!=-1 &&){
    //                 ans++;
    //                 cout<<i<<" "<<j<<endl;
    //             }
    //         }
    //     }

        
    //     cout<<"Case #"<<tt-t<<": "<<ans<<endl;
    // }
    int n,m;
    cin>>n>>m;
    vector<vector<int>> adj(n+1);
    int x,y;
    fori(m){
        cin>>x>>y;
        adj[x].pb(y);
        adj[y].pb(x);
    }
    queue<int> q;
    vector<bool> used(n+1);
    vector<int> d(n+1), p(n+1);
    int s=1;
    q.push(s);
    used[s] = true;
    p[s] = -1;
    while (!q.empty())
    {
        int v = q.front();
        q.pop();
        for (int u : adj[v])
        {
            if (!used[u])
            {
                used[u] = true;
                q.push(u);
                d[u] = d[v] + 1;
                p[u] = v;
            }
        }
    }
    bool con=true;
    for(int i=1;i<=n;i++){
        if(!used[i]){
            con=false;
            break;
        }
    }
    if(!con) cout<<"No"<<endl;
    else{
        cout<<"Yes"<<endl;;
        for(int i=2;i<=n;i++){
            cout<<p[i]<<endl;
        }
    }
}

Measured memory_bytes: 10568