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

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]
    }
  })

  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"));