#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
#include <algorithm>
#include <string>

using namespace std;

using ipair = pair<int, int>;
// bool operator>(const ipair a, const ipair b) { return a.first > b.first; };

int main()
{
    int n, m;
    cin >> n >> m;
    // int a[m], c[m];
    ipair vs[2 * m];
    int tempa, tempb;
    long long int s[n], q[n];
    int nodesnum[n], nodelabel[n];
    for (int i = 0; i < n; i++)
    {
        nodesnum[i] = 0;
        nodelabel[i] = 0;
    }
    for (int i = 0; i < m; i++)
    {
        cin >> tempa >> tempb;
        vs[i].first = tempa - 1;
        vs[i].second = tempb - 1;
        vs[m + i].first = tempb - 1;
        vs[m + i].second = tempa - 1;
        nodesnum[tempa - 1]++;
        nodesnum[tempb - 1]++;
    }
    tempa = 0;
    for (int i = 0; i < n; i++)
    {
        nodelabel[i] = tempa;
        tempa += nodesnum[i];
    }
    const int Inf = n + 1;
    sort(vs, vs + 2 * m);
    int d[n], up, vp;
    int numq = n - 1, u, v;
    for (int i = 1; i < n; i++)
    {
        d[i] = -1;
    }
    queue<int> que;
    que.push(0);
    d[0] = 0;

    while (numq > 0)
    {
        u = que.front();
        que.pop();
        up = d[u];

        for (int i = 0; i < nodesnum[u]; i++)
        {
            v = vs[nodelabel[u] + i].second;
            // cout << v << endl;
            if (d[v] == -1)
            {
                d[v] = up + 1;
                que.push(v);
                s[v] = u;
                numq--;
            }
        }
    }
    // for (int)
    // for (int i = 0; i < m; i++)
    // {
    //     cin >> tempa >> tempb;
    //     a[tempa - 1][c[tempa - 1]] = tempb - 1;
    //     a[tempb - 1][c[tempb - 1]] = tempa - 1;
    //     c[tempa - 1]++;
    //     c[tempb - 1]++;
    // }
    // const int Inf = n + 1;
    //
    // ipair d[n], up, vp;
    // int numq = n - 1, u, v;
    // for (int i = 1; i < n; i++)
    // {
    //     d[i].first = Inf;
    //     d[i].second = i;
    //     q[i] = i;
    // }
    // d[0].first = 0;
    // d[0].second = 0;
    // priority_queue<ipair, vector<ipair>, greater<ipair>

    //                >
    //     P;
    // P.push(d[0]);
    // while (numq != 0)
    // {
    //     up = P.top();
    //     P.pop();
    //     numq--;
    //     u = up.second;
    //     for (int i = 0; i < m; i++)
    //     {
    //         if (vs[i].first == u)
    //             v = vs[i].second;
    //         if (vs[i].second == u)
    //             v = vs[i].first;
    //         if (d[v].first > d[u].first + 1)
    //         {
    //             s[v] = u;
    //             d[v].first = d[u].first + 1;
    //             P.push(d[v]);
    //         }
    //     }
    // }

    // for (int i = 0; i < n; i++)
    // {
    //     for (int j = 0; j < m; j++)
    //     {
    //         u = a[j] - 1;
    //         v = b[j] - 1;
    //         // cout << j << u << v << endl;
    //         if (d[v] > d[u] + 1)
    //         {
    //             s[v] = u;
    //             d[v] = d[u] + 1;
    //         }
    //         if (d[u] > d[v] + 1)
    //         {
    //             s[u] = v;
    //             d[u] = d[v] + 1;
    //         }
    //     }
    // }

    cout << "Yes" << endl;
    for (int i = 1; i < n; i++)
    {
        cout << s[i] + 1 << endl;
    }
    return 0;
}


Measured memory_bytes: 9124