Buggy python submission (verdict: Time Limit Exceeded):
from collections import deque

N, M = map(int, input().split()) # ノード数, エッジ数
edges = [[] for i in range(N)] # エッジ
for i in range(M):
    A, B = map(int, input().split())
    edges[A - 1] += [B - 1]
    edges[B - 1] += [A - 1]

# 幅優先探索
que = deque([0]) # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ
while -1 in ans: # 未探索ノードがある間
    node = que.popleft() # キューから取り出し
    for neighbor in edges[node]: # 全ての隣接ノードに対して
        if ans[neighbor] == -1: # 未探索なら
            ans[neighbor] = node + 1 # 道しるべを設定
            que.append(neighbor) # キューに入れる

print('Yes')
for a in ans[1:]:
    print(a)


Fixed submission:
# 入力
N, M = map(int, input().split()) # ノード数, エッジ数
edges = [[] for i in range(N)] # エッジ
for i in range(M):
    A, B = map(int, input().split())
    edges[A - 1] += [B - 1]
    edges[B - 1] += [A - 1]

# 幅優先探索
que = [0] # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ
while -1 in ans: # 未探索ノードがある間
    quetmp = que
    que = []
    for node in quetmp: # 探索キュー内のノードに対して
        for neighbor in edges[node]: # 全ての隣接ノードに対して
            if ans[neighbor] == -1: # 未探索なら
                ans[neighbor] = node + 1 # 道しるべを設定
                que += [neighbor] # キューに入れる

# 出力
print('Yes')
for a in ans[1:]:
    print(a)

Buggy python submission (verdict: Runtime Error):
from collections import deque

N, M = map(int, input().split()) # ノード数, エッジ数
edges = [[] for i in range(M)] # エッジ
for i in range(M):
    A, B = map(int, input().split())
    edges[A - 1] += [B - 1]
    edges[B - 1] += [A - 1]

que = deque([0]) # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ

while -1 in ans: # 未探索ノードがある間
    node = que.popleft() # キューから取り出し
    for neighbor in edges[node]: # 全ての隣接ノードに対して
        if ans[neighbor] == -1: # 未探索なら
            ans[neighbor] = node + 1 # 道しるべを設定
            que.append(neighbor) # キューに入れる

print('Yes')
for a in ans[1:]:
    print(a)


Fixed submission:
# 入力
N, M = map(int, input().split()) # ノード数, エッジ数
edges = [[] for i in range(N)] # エッジ
for i in range(M):
    A, B = map(int, input().split())
    edges[A - 1] += [B - 1]
    edges[B - 1] += [A - 1]

# 幅優先探索
que = [0] # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ
while -1 in ans: # 未探索ノードがある間
    quetmp = que
    que = []
    for node in quetmp: # 探索キュー内のノードに対して
        for neighbor in edges[node]: # 全ての隣接ノードに対して
            if ans[neighbor] == -1: # 未探索なら
                ans[neighbor] = node + 1 # 道しるべを設定
                que += [neighbor] # キューに入れる

# 出力
print('Yes')
for a in ans[1:]:
    print(a)

Buggy python submission (verdict: Time Limit Exceeded):
from collections import deque

N, M = map(int, input().split()) # ノード数, エッジ数
edges = [set(map(int, input().split())) for i in range(M)] # エッジ
que = deque([1]) # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ

while -1 in ans: # 未探索ノードがある間
    node = que.popleft() # キューから取り出し
    for edge in edges: # 全てのエッジに対して
        if node in edge: # 現在のノードを含むなら
            neighbor = (edge - {node}).pop() # 隣接ノードを確認
            if ans[neighbor - 1] == -1: # 隣接ノードが未探索なら
                ans[neighbor - 1] = node # 道しるべを設定
                que.append(neighbor) # キューに入れる

print('Yes')
for a in ans[1:]:
    print(a)


Fixed submission:
# 入力
N, M = map(int, input().split()) # ノード数, エッジ数
edges = [[] for i in range(N)] # エッジ
for i in range(M):
    A, B = map(int, input().split())
    edges[A - 1] += [B - 1]
    edges[B - 1] += [A - 1]

# 幅優先探索
que = [0] # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ
while -1 in ans: # 未探索ノードがある間
    quetmp = que
    que = []
    for node in quetmp: # 探索キュー内のノードに対して
        for neighbor in edges[node]: # 全ての隣接ノードに対して
            if ans[neighbor] == -1: # 未探索なら
                ans[neighbor] = node + 1 # 道しるべを設定
                que += [neighbor] # キューに入れる

# 出力
print('Yes')
for a in ans[1:]:
    print(a)

Buggy python submission (verdict: Runtime Error):
from collections import deque

n, m = map(int, input().split()) #ノード数, エッジ数
x = [] #エッジ
y = {i + 1 for i in range(n)} #未探索ノード
z = deque([1]) #探索用キュー
ans = []

for i in range(m):
    x += [set(map(int, input().split()))]

while y != set():
    s = set()
    t = z.popleft()
    for u in x:
        if t in u:
            s.add((u - t).pop())
    for v in s & y:
        ans[v - 1] = t
        z.append(v)
    y.remove(t)

print('Yes')
for w in ans[1:]:
    print(w)


Fixed submission:
# 入力
N, M = map(int, input().split()) # ノード数, エッジ数
edges = [[] for i in range(N)] # エッジ
for i in range(M):
    A, B = map(int, input().split())
    edges[A - 1] += [B - 1]
    edges[B - 1] += [A - 1]

# 幅優先探索
que = [0] # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ
while -1 in ans: # 未探索ノードがある間
    quetmp = que
    que = []
    for node in quetmp: # 探索キュー内のノードに対して
        for neighbor in edges[node]: # 全ての隣接ノードに対して
            if ans[neighbor] == -1: # 未探索なら
                ans[neighbor] = node + 1 # 道しるべを設定
                que += [neighbor] # キューに入れる

# 出力
print('Yes')
for a in ans[1:]:
    print(a)

Buggy python submission (verdict: Time Limit Exceeded):
def dijkstra(startNode, nodeNum, edgeNum, cost):
    '''
    startNodeから各頂点への最短距離をダイクストラ法で計算
    startNode:始点
    nodeNum:ノードの数
    edgeNum:エッジの数
    cost[a][b]:ab間の距離
    '''
    d = [float('inf')]*nodeNum
    x = [0]*nodeNum
    usedNode = [False]*nodeNum
    d[startNode] = 0
    
    while True:
        v = -1
        y = 0
        for i in range(n):
            if (not usedNode[i]) and (v == -1):
                v=i
                y=i+1
            elif (not usedNode[i]) and d[i] < d[v]:
                v=i
                y=i+1
        if v == -1:
            break
        usedNode[v] = True

        for j in range(n):
            if d[j] > d[v]+cost[v][j]:
                d[j] = d[v]+cost[v][j]
                x[j] = y
    return d,x


n, m = map(int, input().split())
a = [0 for i in range(m)]
b = [0 for i in range(m)]
for i in range(m):
    a[i], b[i] = map(int, input().split())

c = [[float('inf') for i in range(n)] for j in range(n)]
for i in range(m):
    c[a[i-1]-1][b[i-1]-1] = 1
    c[b[i-1]-1][a[i-1]-1] = 1

d,x = dijkstra(0, n, m, c)

print('Yes')
for i in range(n-1):
    print(x[i+1])


Fixed submission:
# 入力
N, M = map(int, input().split()) # ノード数, エッジ数
edges = [[] for i in range(N)] # エッジ
for i in range(M):
    A, B = map(int, input().split())
    edges[A - 1] += [B - 1]
    edges[B - 1] += [A - 1]

# 幅優先探索
que = [0] # 探索用キュー
ans = [0] + [-1 for i in range(N - 1)] # 未探索ノード 兼 道しるべ
while -1 in ans: # 未探索ノードがある間
    quetmp = que
    que = []
    for node in quetmp: # 探索キュー内のノードに対して
        for neighbor in edges[node]: # 全ての隣接ノードに対して
            if ans[neighbor] == -1: # 未探索なら
                ans[neighbor] = node + 1 # 道しるべを設定
                que += [neighbor] # キューに入れる

# 出力
print('Yes')
for a in ans[1:]:
    print(a)