Language: C

#include <stdio.h>

#define SIZE 100000000

const int inf = 100000000;

enum status {
	EMPTY,
	AVAILABLE,
	FULL
};

typedef struct {
	int data[SIZE];
	int head;
	int tail;
	int flag;
}queue_t;

int m, n;
int d[200010][200010], dd[200010] = { 0 }, t[200010] = { 0 };


/*void printQueue(queue_t* pQueue) {
	for (int i = 0; i < SIZE; i++) {
		printf("%d", pQueue->data[i]);
	}
	printf("\n");
}*/

void initQueue(queue_t* pQueue) {
	for (int i = 0; i < SIZE; i++) {
		pQueue->data[i] = 0;
	}
	pQueue->head = 0;
	pQueue->tail = 0;
	pQueue->flag = EMPTY;
	//printQueue(pQueue);
}

void enqueue(queue_t* pQueue, int value) {
	if (pQueue->flag == FULL) {
		return;
	}
	pQueue->data[pQueue->tail] = value;
	if (pQueue->tail == SIZE - 1) {
		pQueue->tail = 0;
	}
	else {
		pQueue->tail++;
	}
	if (pQueue->tail == pQueue->head) {
		pQueue->flag = FULL;
	}
	else {
		pQueue->flag = AVAILABLE;
	}
	//printQueue(pQueue);
}

int dequeue(queue_t* pQueue) {
	if (pQueue->flag == EMPTY) {
		return 0;
	}
	int i = pQueue->data[pQueue->head];
	pQueue->data[pQueue->head] = 0;
	if (pQueue->head == SIZE - 1) {
		pQueue->head = 0;
	}
	else {
		pQueue->head++;
	}
	if (pQueue->tail == pQueue->head) {
		pQueue->flag = EMPTY;
	}
	else {
		pQueue->flag = AVAILABLE;
	}
	//printQueue(pQueue);
	return i;
}

int main() {
	queue_t queue;
	queue_t* pQueue = &queue;
	initQueue(pQueue);
	scanf("%d%d", &n, &m);
	for (int i = 0; i < m; i++) {
		int a , b;
		scanf("%d%d", &a, &b);
		d[a][t[a]] = b;
		d[b][t[b]] = a;
		t[a]++;
		t[b]++;
	}

	//for (int i = 0; i < t[1]; i++)printf("%d f\n", d[1][i]);

	for (int i = 0; i <= n; i++) dd[i] = inf;

	for (int i = 0; i < t[1]; i++) {
		enqueue(pQueue, d[1][i]);
		dd[d[1][i]] = 1;
	}
	dd[1] = 0;

	while (pQueue->flag != EMPTY) {
		int p = dequeue(pQueue);
		//printf("\n%di ", p);
		for (int i = 0; i < t[p]; i++) {
			int n = d[p][i];
			//printf(" %dok ", n);
;			if (dd[n] == inf) {
				for (int i = 0; i < t[n]; i++) {
					//printf("%den\?", d[n][i]);
					if (dd[d[n][i]] == inf) {
						enqueue(pQueue, d[n][i]);
						//printf("%den", d[n][i]);
					}
				}
				dd[n] = p;
				//printf("\nduy%d %duyr\n", n,dd[n]);
			}
		}
	}

	for (int i = 0; i < n; i++)if (dd[n] == inf) {
		printf("No");
		return 0;
	}
	printf("Yes\n");
	for (int i = 2; i <= n;i++)printf("%d\n", dd[i]);
	return 0;
}

Compiler output:
/tmp/ccoiN8to.o: in function `main':
main.c:(.text+0x25a): relocation truncated to fit: R_X86_64_PC32 against symbol `t' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x2a2): relocation truncated to fit: R_X86_64_PC32 against symbol `t' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x2e5): relocation truncated to fit: R_X86_64_PC32 against symbol `t' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x2fc): relocation truncated to fit: R_X86_64_PC32 against symbol `t' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x317): relocation truncated to fit: R_X86_64_PC32 against symbol `t' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x32e): relocation truncated to fit: R_X86_64_PC32 against symbol `t' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x366): relocation truncated to fit: R_X86_64_PC32 against symbol `dd' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x3da): relocation truncated to fit: R_X86_64_PC32 against symbol `dd' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x3eb): relocation truncated to fit: R_X86_64_PC32 against symbol `t' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x3f6): relocation truncated to fit: R_X86_64_PC32 against symbol `dd' defined in .bss section in /tmp/ccoiN8to.o
main.c:(.text+0x458): additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status