Buggy python submission (verdict: Runtime Error):
import numpy as np

#まず一行目の"N M"を取得
N,M=map(int, input().split()) 

#2-M+1行目を入力する
arr_path=np.array([0,0])
#空のarrayを値0として定義した
for i in range(M):
    a,b=map(int,input().split())
    arr=np.array([a,b])
    arr_path=np.vstack([arr_path,arr])    

#もはや入れ子構造のリストを使うことにして、level_0のような表現は必要ない
#層の全体を格納するリストのリスト（index0,1,2..と引数に対応して、層0,1,2...と対応する）
class_layer=[]
class_layer.append([1])

#部屋xからの移動先を出力する関数
def transit(x):
    path=arr_path[np.any(arr_path==x, axis=1)]
    #これはいま部屋iを考えている（levelという層にある部屋）
    #pathをarrayから抽出して、その部屋から移動することを考える
    path=path[path != x]
    trans_list=path.tolist()
    return trans_list

#層構造(x層)を1上げて上の層を出力する関数を定義する
def level_up(x):
    now=class_layer[x]
    pre=[]
    if x >=1:
        pre=class_layer[x-1]
    li=[] 
    for i in now:
        for j in transit(i):
            if j in now:
                continue
            elif j in pre:
                continue
            else:
                li.append(j)
    class_layer.append(li)
    
for i in range(M):
    level_up(i)


#1つの部屋に対して、その部屋が何番目の層なのか出力する
def layer_finder(x):
    for i in range(M):
        for j in class_layer[i]:
            if j==x:
                global ans
                ans=i
                #local変数になってしまっていて、関数外でいまいちうまく使えないので、変数を置く前にglobal宣言というものをしてglobal変数にする
                break
            else:
                continue
    return ans


#部屋xが何番の矢印を示せばいいのか出力
def path_get(x):
    #部屋xは層が幾つなのか
    X=layer_dict[x-1]
    #(X-1)層の部屋番号を出力
    li1=class_layer[X-1]
    
    #部屋xからの移動先
    path=arr_path[np.any(arr_path==x, axis=1)]
    path=path[path != x]
    li2=path.tolist()
    
    #l1とl2の共通部分を出す
    #setと&を使うといいらしい!
    li_common=list(set(li1) & set(li2))
    
    print(li_common[0])
    

    
print("yes")
for i in range(2,N+1):
    path_get(i)


Fixed submission:
from collections import deque

N, M = map(int, input().split())
AB = [map(int, input().split()) for _ in range(M)]

links = [[] for _ in range(N + 1)]
for a, b in AB:
    links[a].append(b)
    links[b].append(a)

result = [-1] * (N + 1)
q = deque([1])
while q:
    i = q.popleft()
    for j in links[i]:
        if result[j] == -1:
            result[j] = i
            q.append(j)
print('Yes')
print('\n'.join(str(i) for i in result[2:]))

Buggy python submission (verdict: Runtime Error):
#まず一行目の"N M"を取得
N,M=map(int, input().split()) 

#2-M+1行目を入力する
arr_path=np.array([0,0])
#空のarrayを値0として定義した
for i in range(M):
    a,b=map(int,input().split())
    arr=np.array([a,b])
    arr_path=np.vstack([arr_path,arr])    

#もはや入れ子構造のリストを使うことにして、level_0のような表現は必要ない
#層の全体を格納するリストのリスト（index0,1,2..と引数に対応して、層0,1,2...と対応する）
class_layer=[]
class_layer.append([1])

#部屋xからの移動先を出力する関数
def transit(x):
    path=arr_path[np.any(arr_path==x, axis=1)]
    #これはいま部屋iを考えている（levelという層にある部屋）
    #pathをarrayから抽出して、その部屋から移動することを考える
    path=path[path != x]
    trans_list=path.tolist()
    return trans_list

#層構造(x層)を1上げて上の層を出力する関数を定義する
def level_up(x):
    now=class_layer[x]
    pre=[]
    if x >=1:
        pre=class_layer[x-1]
    li=[] 
    for i in now:
        for j in transit(i):
            if j in now:
                continue
            elif j in pre:
                continue
            else:
                li.append(j)
    class_layer.append(li)
    
for i in range(M):
    level_up(i)


#1つの部屋に対して、その部屋が何番目の層なのか出力する
def layer_finder(x):
    for i in range(M):
        for j in class_layer[i]:
            if j==x:
                global ans
                ans=i
                #local変数になってしまっていて、関数外でいまいちうまく使えないので、変数を置く前にglobal宣言というものをしてglobal変数にする
                break
            else:
                continue
    return ans


#部屋xが何番の矢印を示せばいいのか出力
def path_get(x):
    #部屋xは層が幾つなのか
    X=layer_dict[x-1]
    #(X-1)層の部屋番号を出力
    li1=class_layer[X-1]
    
    #部屋xからの移動先
    path=arr_path[np.any(arr_path==x, axis=1)]
    path=path[path != x]
    li2=path.tolist()
    
    #l1とl2の共通部分を出す
    #setと&を使うといいらしい!
    li_common=list(set(li1) & set(li2))
    
    print(li_common[0])
    

    
print("yes")
for i in range(2,N+1):
    path_get(i)

Fixed submission:
from collections import deque

N, M = map(int, input().split())
AB = [map(int, input().split()) for _ in range(M)]

links = [[] for _ in range(N + 1)]
for a, b in AB:
    links[a].append(b)
    links[b].append(a)

result = [-1] * (N + 1)
q = deque([1])
while q:
    i = q.popleft()
    for j in links[i]:
        if result[j] == -1:
            result[j] = i
            q.append(j)
print('Yes')
print('\n'.join(str(i) for i in result[2:]))