#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

typedef struct tagListNode {
	int s_time;	/*1からそこに行くのにどれだけかかるか*/
	int b_room;	/*1へ行くのに通る1つ前の部屋*/
} ROOM;

char **dmatrix(int x,int y);	/*x行y列の配列を確保する*/
void free_dmatrix(char **a,int x);/*x行の配列を解放する*/

int main(void){
	int N,M;
	char **road;/*1は道がある,0は道がない*/
	ROOM *room;
	int *search_room,search_num;/*次に探索する部屋の配列とその個数*/
	int *next_room,next_num=0;
	int i,j,flag;
	char str[10000000];
 
	fgets(str, sizeof(str), stdin);
	N=atoi(strtok(str," "));
	M=atoi(strtok(NULL," "));

	road=dmatrix( (N+1),(N+1));
	room=(ROOM*)calloc((N+1),sizeof(ROOM));
	search_room=(int*)calloc((N+1),sizeof(int));
	next_room  =(int*)calloc((N+1),sizeof(int));

	for(i=0;i<M;i++){
		int A,B;
		fgets(str, sizeof(str), stdin);
		A=atoi(strtok(str," "));
		B=atoi(strtok(NULL," "));
		road[A][B]=1;	/*AからBへの道*/
		road[B][A]=1;	/*ここをいじると双方向から単方向にできる*/
	}

	room[1].s_time=0;
	room[1].b_room=0;
	for(i=2;i<=N;i++){
		room[i].s_time=2*N;
	}
	search_room[1]=1;/*一番入り口に近いのは1*/
	search_num=1;
	while(1){
		for(i=1;i<=search_num;i++){/*一番外側の各部屋について*/
			for(j=1;j<=N;j++){
				if(road[ search_room[i] ][j]==1){/*道があったら*/
					if( room[search_room[i]].s_time < room[j].s_time){/*道の先より自身が近かったら*/
						room[j].s_time=room[search_room[i]].s_time+1;
						room[j].b_room=search_room[i];
						next_num++;
						next_room[next_num]=j;
					}
				}
			}
		}
		if(next_num==0){//次の部屋がなかったら終了
			break;
		}else{
			for(i=1;i<=next_num;i++){
				search_room[i]=next_room[i];
			}
			search_num=next_num;
			next_num=0;
		}
		
	}

	flag=0;
	for(i=0;i<N;i++){
		if(room[i].s_time==2*M) flag=1;
	}

	if(flag==1){
		printf("No\n");
	}else{
		printf("Yes\n");
		for(i=2;i<=N;i++){
			printf("%d\n",room[i].b_room);
		}
	}


	free(room);
	free(next_room);
	free(search_room);

	return 0;
}

char **dmatrix(int x,int y)			//x行y列の配列を確保する.
{
	int i;
	char **a;
	if ( ( a = (char**)calloc(x,sizeof(char*)) ) == NULL){
		//printf("メモリの確保に失敗しました.\nプログラムを終了します.");
		exit(1);
	}
	for(i=0;i<x;i++) a[i]=(char*)calloc(y,sizeof(char));
	return (a);
}

void free_dmatrix(char **a,int x)//x行の配列を解放する.
{
	int i;
	for (i=0;i<x;i++) free((void*)(a[i]));	
	free((void*)(a)); 
}