var r = {};
var result = {};
var stack = [1];

function getRoute() {
	if (stack.length === 0) {
		return
	}
	var a = stack.shift();
	if (!r[a]) {
		getRoute();
	}
	for (var i = 0; i < r[a].length; i++) {
		var n = r[a][i];
		if (n === 1 || result[n]) {
			continue;
		}
		result[n] = a;
		// console.log("getRoute: " + a + " to " + n);
		stack.push(n);
	}
	getRoute();
}

// inputに入力データ全体が入る
function Main(input) {
	// 1行目がinput[0], 2行目がinput[1], …に入る
	const inputLines = input.split("\n");
	var n, m;
	var output = "";
	for (var i = 0; i < inputLines.length; i++) {
		const line = inputLines[i];
		const lineVars = line.split(" ");
		const a = parseInt(lineVars[0], 10)
		const b = parseInt(lineVars[1], 10)
		
		if (i === 0) {
			n = a;
			m = b;
		} else {
			if (!r[a]) {
				r[a] = [];
			}
			if (!r[b]) {
				r[b] = [];
			}
			r[a].push(b);
			r[b].push(a);
		}
	}
	// console.log(n, m, r);
	getRoute();
	// console.log(result);
	// console.log("keys: " + Object.keys(result));
	var output="";
	if (Object.keys(result).length === n-1) {
		output += "yes\n";
		for (var i = 2; i <= n; i++) {
			output += result[i];
			if (i !== n) {
				output += "\n";
			}
		}	
	} else {
		output += "no\n";
	}
	console.log(output);
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));

// node index.js
// 1
// 2 3
// test
// (Ctrl + D)