#include <stdio.h>
#include <stdbool.h>

int main()
{
  int n, m;
  scanf("%d %d", &n, &m);
  int Distance[n][n];
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      Distance[i][j] = -1;
    }
  }
  int a, b;
  for (int i = 0; i < m; i++)
  {
    scanf("%d %d", &a, &b);
    Distance[a - 1][b - 1] = 1;
    Distance[b - 1][a - 1] = 1;
  }
  for (int i = 0; i < n; i++)
  {
    Distance[i][i] = 0;
  }

  int nPoint = n;

  int sp = 0, dp = 1;
  printf("Yes\n");
  while (dp < n)
  {

    int sRoute[nPoint]; /* 出発地から目的地までの最短経路上の地点の地点番号を目的地から出発地の順に設定する1次元配列 */
    int sDist;          /* 出発地から目的地までの最短距離 */

    /* その他使う変数 */
    int pDist[nPoint]; /* 出発地から各地点までの最短距離を設定する配列 */
    int pRoute[nPoint];
    bool pFixed[nPoint]; /* 出発地から各地点までの最短距離が確定しているかどうかを識別するための配列 */
    int sPoint, i, j, newDist;

    sDist = 999999; /* 出発地から目的地までの最短距離に初期値を格納する（変更しなくてよい） */

    for (i = 0; i < nPoint; i++)
    {
      sRoute[i] = -1;    /* 最短経路上の地点の地点番号に初期値を格納する */
      pDist[i] = 999999; /* 出発地から各地点までの最短距離に初期値を格納する */
      pFixed[i] = false; /* 各地点の最短距離の確定状態に初期値を格納する */
    }

    pDist[sp] = 0; /* 出発地から出発地自体への最短距離に0を設定する */

    while (true)
    { /* 最短経路探索処理 */
      i = 0;
      while (i < nPoint)
      { /* 未確定の地点を1つ探す */
        if (pFixed[i] == 0)
        {
          break; /* 再内側の繰り返しから抜ける */
        }
        i = i + 1;
      }

      if (i == nPoint)
      {        /* 出発地から全ての地点までの最短経路が確定していれば */
        break; /* 最短経路探索処理を抜ける */
      }

      for (j = i + 1; j < nPoint; j++)
      { /* 最短距離がより短い地点を探す */
        if ((pFixed[j] == 0) && (pDist[j] < pDist[i]))
        {
          i = j;
        }
      }

      sPoint = i;
      pFixed[sPoint] = true; /* 出発地からの最短距離を確定する */

      for (j = 0; j < nPoint; j++)
      {
        if ((Distance[sPoint][j] > 0) && (pFixed[j] == 0))
        {
          newDist = pDist[sPoint] + Distance[sPoint][j];
          if (newDist < pDist[j])
          {
            pDist[j] = newDist;
            pRoute[j] = sPoint;
          }
        }
      }
    }

    sDist = pDist[dp];
    j = 0;
    i = dp;
    while (i != sp)
    {
      sRoute[j] = i;
      i = pRoute[i];
      j = j + 1;
    }
    sRoute[j] = sp;

    printf("%d\n", sRoute[1] + 1);
    dp++;
  }

  return 0;
}