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

int main()
{
	int cnt;
	int IP_a;//input buffer
	int IP_b;
	int rooms;
	int remain_room;
	int room[100001][2] ={0};//[nextRoom][level]
	int routes;
	int remain_route =0;
	int levels;
	int route[200001][2] ={0};
	char ans[4] = "Yes";


	scanf("%d %d", &rooms, &routes);
	remain_room = rooms-1;

	for( cnt=0; cnt < routes; cnt++){
		scanf("%d %d", &IP_a, &IP_b);
		
		if(IP_a == 1){
			room[IP_b][0] = 1;
			room[IP_b][1] = 1;
			remain_room--;
		}else if(IP_b == 1){
			room[IP_a][0] = 1;
			room[IP_a][1] = 1;
			remain_room--;
		}else{
			route[remain_route][0] = IP_a;
			route[remain_route][1] = IP_b;
			remain_route++;
		}
	}

	for( levels=1; remain_route != 0; levels++){
		routes = remain_route; // reuse for checker 
		
		cnt =0;
		while(cnt < remain_route ){
			IP_a = route[cnt][0];
			IP_b = route[cnt][1];
			
			if(room[IP_a][1] == 0 && room[IP_b][1] == 0){
				cnt++;
			}else{
				if(room[IP_a][1] == 0 && room[IP_b][1] == levels){
					room[IP_a][0] = IP_b;
					room[IP_a][1] = levels+1;
					remain_room--;
				}else if(room[IP_a][1] == levels && room[IP_b][1] == 0){
					room[IP_b][0] = IP_a;
					room[IP_b][1] = levels+1;
					remain_room--;
				}
				
				//delete route
				remain_route--;
				route[cnt][0] = route[remain_route][0] ;
				route[cnt][1] = route[remain_route][1] ;
			}
		}
		
		if(routes == remain_route){ //there are nouse route
			strcpy(ans,"No");
			break;
		}
	}

	if(remain_room > 0){ //there are no exit room
		strcpy(ans,"No");
	}

	printf("%s\n", ans);

	if(ans[0] == 'Y'){
		for(cnt = 2; cnt <= rooms; cnt++){
			printf("%d\n",room[cnt][0]);
		}
	}
}