Buggy python submission (verdict: Runtime Error):
#６回目、2020-0612
#2重ループ + numpy
#場合分けを近道と通常のみ（絶対値を使う）
import numpy as np 
#初期入力
N, x, y = map(int, input().split())
dist =np.zeros((N,N),dtype=np.int64)

#iからjの距離
for i in range(1,N):
    j =np.arange(i+1,N+1)
    normal =j -i
    short  =abs(x-i) +1 +abs(j-y)
    dist[i-1,i:] =np.minimum(normal,short)
    #print(d)
#距離別の数
a,ans =np.unique(dist,return_counts=True)      
ans =np.delete(ans,0) #距離０を削除
count_zero =N-1-len(ans) 
ans =np.append(ans,np.zeros(count_zero))#存在しない遠い距離は０

#出力
for i in ans:
    print(int(i))

Fixed submission:
N, X, Y = map(int, input().split())
D = [None] + [0] * (N - 1) #最低距離が1からNまでの個数を表示するリストを作る(YZT さんのコメント)

#各最低距離の個数カウント
for i in range(1, N):                           # i 出発
    for j in range(i + 1, N + 1):               # j 到着
        d = min(abs(j - i),                     # 近道をしない
                abs(X - i) + 1 + abs(j - Y),    # 「+1」は近道の距離、X < Y　
                abs(Y - i) + 1 + abs(j - X))    # 「+1」は近道の距離、Y < X　
        D[d] += 1                               # 距離ｄごとにカウント
        # print(abs(j-i),abs(X-i)+1 , abs(j-Y) , abs(Y - i) + 1,abs(j - X)," ",d,D," ",i,j)
    
for d in D[1:]: #最低距離は１だから距離０は使わないが、添え字＝距離とすることでわかりやすい
    print(d)

Buggy python submission (verdict: Runtime Error):
#６回目、2020-0612
#2重ループ + numpy
#場合分けを近道と通常のみ（絶対値を使う）
import numpy as np 
#初期入力
N, x, y = map(int, input().split())
dist =np.zeros((N,N),dtype=int)

#iからjの距離
for i in range(1,N):
    j =np.arange(i+1,N+1)
    normal =j -i
    short  =abs(x-i) +1 +abs(j-y)
    dist[i-1,i:] =np.minimum(normal,short)
    #print(d)
#距離別の数
a,ans =np.unique(dist,return_counts=True)      
ans =np.delete(ans,0) #距離０を削除
count_zero =N-1-len(ans) 
ans =np.append(ans,np.zeros(count_zero))#存在しない遠い距離は０

#出力
for i in ans:
    print(int(i))

Fixed submission:
N, X, Y = map(int, input().split())
D = [None] + [0] * (N - 1) #最低距離が1からNまでの個数を表示するリストを作る(YZT さんのコメント)

#各最低距離の個数カウント
for i in range(1, N):                           # i 出発
    for j in range(i + 1, N + 1):               # j 到着
        d = min(abs(j - i),                     # 近道をしない
                abs(X - i) + 1 + abs(j - Y),    # 「+1」は近道の距離、X < Y　
                abs(Y - i) + 1 + abs(j - X))    # 「+1」は近道の距離、Y < X　
        D[d] += 1                               # 距離ｄごとにカウント
        # print(abs(j-i),abs(X-i)+1 , abs(j-Y) , abs(Y - i) + 1,abs(j - X)," ",d,D," ",i,j)
    
for d in D[1:]: #最低距離は１だから距離０は使わないが、添え字＝距離とすることでわかりやすい
    print(d)

Buggy python submission (verdict: Time Limit Exceeded):
#６回目、2020-0612
#2重ループ　＋O(1)
#i,jがループの中か外で場合分け

#初期入力
N, x, y = map(int, input().split())

ans ={i:[]for i in range(1,N)}
for i in range(1,N):
    for j in range(i+1,N+1):
         #（i,jがループより共に左、ともに右）
        if (j <=x or y <=i) :
            ans[j-i].append((i,j))
        # （iがループより左 and jがループより右）
        elif i <=x and y <=j:
            ans[x-i +1 +j-y].append((i,j))
        # i,jが共にループの中
        elif x <i and j <y:
            dist =min(j-i,i-x + y-j +1) #時計回りと反時計回りの短いほう、+1はxとyを結んだ部分
            ans[dist].append((i,j))
        # iがループより左、jがループの中
        elif i <=x and j < y:
            dist =x-i + min(j-x , y+1-j)
            ans[dist].append((i,j)) 
        # iがループの中、jがループの右
        elif x <i and y <=j:
            dist =min(y-i , 1 +i-x) + j-y
            ans[dist].append((i,j)) 

#答え出力
for i in range(1,N):        
    print(len(ans[i]))

Fixed submission:
N, X, Y = map(int, input().split())
D = [None] + [0] * (N - 1) #最低距離が1からNまでの個数を表示するリストを作る(YZT さんのコメント)

#各最低距離の個数カウント
for i in range(1, N):                           # i 出発
    for j in range(i + 1, N + 1):               # j 到着
        d = min(abs(j - i),                     # 近道をしない
                abs(X - i) + 1 + abs(j - Y),    # 「+1」は近道の距離、X < Y　
                abs(Y - i) + 1 + abs(j - X))    # 「+1」は近道の距離、Y < X　
        D[d] += 1                               # 距離ｄごとにカウント
        # print(abs(j-i),abs(X-i)+1 , abs(j-Y) , abs(Y - i) + 1,abs(j - X)," ",d,D," ",i,j)
    
for d in D[1:]: #最低距離は１だから距離０は使わないが、添え字＝距離とすることでわかりやすい
    print(d)

Buggy python submission (verdict: Time Limit Exceeded):
#５回目、2020-0612
#幅優先探索
def bfs(u):
    dq =deque()
    passed =set([u])
    for i in range(1,N+1): #全頂点を始点としてBSFで距離
        dq.append(i)
        dist[(i,i)] =0   
        while dq:
            now =dq.popleft()
            for next in connection[now]:
                if next not in passed and i !=next:
                    dist[(i,next)] =dist[(i,now)] +1
                    ans[dist[(i,next)]].append((i,next))
                    dq.append(next)
                    passed.add(next)
        passed.clear()

    return dist

#初期入力
from collections import deque 
N, x, y = map(int, input().split())

# 構造
connection ={i:set() for i in range(1,N+1)}
for i in range(1,N):
    connection[i  ].add(i+1)
    connection[i+1].add(i)
connection[x].add(y)
connection[y].add(x)

#始点からの距離をBFS
ans ={(i):[] for i in range(0,N) }
dist ={(i,j):None for i in range(1,N) for j in range(i,N+1)}
bfs(1)

#答え出力
for i in range(1,N):        
    print(len(ans[i])//2)

Fixed submission:
N, X, Y = map(int, input().split())
D = [None] + [0] * (N - 1) #最低距離が1からNまでの個数を表示するリストを作る(YZT さんのコメント)

#各最低距離の個数カウント
for i in range(1, N):                           # i 出発
    for j in range(i + 1, N + 1):               # j 到着
        d = min(abs(j - i),                     # 近道をしない
                abs(X - i) + 1 + abs(j - Y),    # 「+1」は近道の距離、X < Y　
                abs(Y - i) + 1 + abs(j - X))    # 「+1」は近道の距離、Y < X　
        D[d] += 1                               # 距離ｄごとにカウント
        # print(abs(j-i),abs(X-i)+1 , abs(j-Y) , abs(Y - i) + 1,abs(j - X)," ",d,D," ",i,j)
    
for d in D[1:]: #最低距離は１だから距離０は使わないが、添え字＝距離とすることでわかりやすい
    print(d)

Buggy python submission (verdict: Time Limit Exceeded):
#５回目、2020-0612
#幅優先探索
def bfs(u):
    dq =deque()
    passed =set([u])
    for i in range(1,N+1): #全頂点を始点としてBSFで距離
        dq.append(i)
        dist[(i,i)] =0   
        while dq:
            now =dq.popleft()
            for next in connection[now]:
                if next not in passed and i !=next:
                    dist[(i,next)] =dist[(i,now)] +1
                    ans[dist[(i,next)]].append((i,next))
                    dq.append(next)
                    passed.add(next)
        passed.clear()

    return dist

#初期入力
from collections import deque 
N, x, y = map(int, input().split())

# 構造
connection ={i:set() for i in range(1,N+1)}
for i in range(1,N):
    connection[i  ].add(i+1)
    connection[i+1].add(i)
connection[x].add(y)
connection[y].add(x)

#始点からの距離をBFS
ans ={(i):[] for i in range(0,N) }
dist ={(i,j):None for i in range(1,N) for j in range(i,N+1)}
bfs(1)

#答え出力
for i in range(1,N):        
    print(len(ans[i])//2)

Fixed submission:
N, X, Y = map(int, input().split())
D = [None] + [0] * (N - 1) #最低距離が1からNまでの個数を表示するリストを作る(YZT さんのコメント)

#各最低距離の個数カウント
for i in range(1, N):                           # i 出発
    for j in range(i + 1, N + 1):               # j 到着
        d = min(abs(j - i),                     # 近道をしない
                abs(X - i) + 1 + abs(j - Y),    # 「+1」は近道の距離、X < Y　
                abs(Y - i) + 1 + abs(j - X))    # 「+1」は近道の距離、Y < X　
        D[d] += 1                               # 距離ｄごとにカウント
        # print(abs(j-i),abs(X-i)+1 , abs(j-Y) , abs(Y - i) + 1,abs(j - X)," ",d,D," ",i,j)
    
for d in D[1:]: #最低距離は１だから距離０は使わないが、添え字＝距離とすることでわかりやすい
    print(d)

Buggy python submission (verdict: Time Limit Exceeded):
#4回目、2020-0609 BSFやりかけたが・・・
#幅優先探索
def bfs(u):
    dist ={i:None for i in range(1,N+1)}
    dist[u] =0   
    dq =deque()
    dq.append(u)
    passed =set([u])
    #for i in range(1,N+1): #全頂点を始点としてBSFで距離
     #   dq.append(i)
    while dq:
        now =dq.popleft()
        for next in connection[now]:
            if next not in passed:
                dist[next] =dist[now] +1
                dq.append(next)
                passed.add(next)
    return dist

#初期入力
from collections import deque 
N, x, y = map(int, input().split())

# 構造
connection ={i:set() for i in range(1,N+1)}
for i in range(1,N):
    connection[i  ].add(i+1)
    connection[i+1].add(i)
connection[x].add(y)
connection[y].add(x)

#始点からの距離をBFS
#ans ={(i,j):[] for i in range(1,N+1) for j in range(1,N+1)}
ans ={(i):[] for i in range(0,N) }
for i in range(1,N+1): # i=始点
    d=bfs(i)
    for j,v in d.items(): #j=各頂点、v=始点から各頂点の距離
        if i <j:
            ans[v].append((i,j)) 
        #ans[i,j].append(v) 
for i in range(1,N):        
    print(len(ans[i]))

Fixed submission:
N, X, Y = map(int, input().split())
D = [None] + [0] * (N - 1) #最低距離が1からNまでの個数を表示するリストを作る(YZT さんのコメント)

#各最低距離の個数カウント
for i in range(1, N):                           # i 出発
    for j in range(i + 1, N + 1):               # j 到着
        d = min(abs(j - i),                     # 近道をしない
                abs(X - i) + 1 + abs(j - Y),    # 「+1」は近道の距離、X < Y　
                abs(Y - i) + 1 + abs(j - X))    # 「+1」は近道の距離、Y < X　
        D[d] += 1                               # 距離ｄごとにカウント
        # print(abs(j-i),abs(X-i)+1 , abs(j-Y) , abs(Y - i) + 1,abs(j - X)," ",d,D," ",i,j)
    
for d in D[1:]: #最低距離は１だから距離０は使わないが、添え字＝距離とすることでわかりやすい
    print(d)