function shortest(nodes) {
  const queue = [{
    ...nodes[1],
    from: 0,
    cost: 0,
  }]
  // let count = 0;
  while(queue.length > 0) {
    const node = queue.pop()
    // count++
    // console.log(node)
    node.path.forEach(e => {
      if (e === node.from || (nodes[e] !== undefined && nodes[e].cost < node.cost + 1)) {
        // console.log('finished this route', e)
        return
      }
      nodes[e].from = node.id
      nodes[e].cost = node.cost + 1
      queue.push(nodes[e])
      // console.log('add queue:', nodes[e])
    })
  }
  // console.log('count:', count)
  // console.log(nodes)
  return nodes
}

function main(input) {
  const inputs = input.split('\n')
  const [N,M] = inputs[0].split(' ')

  const nodes = {}
  inputs.slice(1).forEach(e => {
    const [A, B] = e.split(' ')
    nodes[A] = nodes[A] ?
    {
      ...nodes[A],
      path: [...nodes[A].path, B]
    } :
    {
      id: A,
      path: [B]
    }
    nodes[B] = nodes[B] ?
    {
      ...nodes[B],
      path: [...nodes[B].path, A]
    } :
    {
      id: B,
      path: [A]
    }
  })
  // console.log(nodes)

  const result = shortest(nodes)
  if (Object.keys(result).length !== Number(N)) {
    console.log('No')
  } else {
    console.log('Yes')
    Array.from(new Array(Number(N-1))).forEach((e, i) => {
      console.log(result[i + 2].from)
    })
  }
}

// main(
//   `4 4
// 1 2
// 2 3
// 3 2
// `
// )

// //
// // main(
// //   `4 4
// // 1 2
// // 2 3
// // 3 4
// // 4 2`
// // )
// //
// //
// main(
// `6 9
// 3 4
// 6 1
// 2 4
// 5 3
// 4 6
// 1 5
// 6 2
// 4 5
// 5 6`
// )
main(require("fs").readFileSync("/dev/stdin", "utf8"));

