from sys import stdin

from collections import deque





def get_adj_list(num_nodes, data, undirected=True):

    # adj_list ex) {1:[2,3,4], 2:[1,4,5], 3:[1,4], 4:[1,2,3,5], 5:[2,4]}

    graph = {}

    for i in range(num_nodes):

        graph[i+1] = []

    for val in data:

        x, y = val

        graph[x] = graph[x] + [y]

        if undirected:

            graph[y] = graph[y] + [x]

    return graph





def breadth_first_search(adj_list, start_node):

    dist = {}

    queue = deque([(start_node, 0)])

    while len(queue) > 0:

        v, d = queue.popleft()

        if v in dist: continue

        dist[v] = d

        for u in adj_list[v]:

            if u not in dist:

                queue.append((u, d+1))

    return dist



# bfs

def get_result(data):

    N, X, Y = data

    _data = [[i, i+1] for i in range(1, N)]

    _data += [[X, Y]]

    adj_list = get_adj_list(N, _data)

    dist_cnt = [0 for i in range(N)]

    for i in range(N):

        dist = breadth_first_search(adj_list, i+1)

        for j in range(i, N):

            dist_cnt[dist[j+1]] += 1

    for i in range(1, N):

        print((dist_cnt[i]))



# 解説のコード

# def get_result(data):

#     N, X, Y = data

#     dist_cnt = [0 for i in range(N)]

#     for i in range(1, N+1):

#         for j in range(i+1, N+1):

#             min_dist = min([j-i, abs(X-i) + 1 + abs(Y-j), abs(Y-i) + 1 + abs(X-j)])

#             dist_cnt[min_dist] += 1

#     for i in range(1, N):

#         print(dist_cnt[i])





if __name__ == '__main__':

    data = list(map(int, stdin.readline().rstrip('\n').split(' ')))

    get_result(data)
# from sys import stdin



# # 解説のコード

# def get_result(data):

#     N, X, Y = data

#     dist_cnt = [0 for i in range(N)]

#     for i in range(1, N+1):

#         for j in range(i+1, N+1):

#             min_dist = min([j-i, abs(X-i) + 1 + abs(Y-j), abs(Y-i) + 1 + abs(X-j)])

#             dist_cnt[min_dist] += 1

#     for i in range(1, N):

#         print(dist_cnt[i])





# if __name__ == '__main__':

#     data = list(map(int, stdin.readline().rstrip('\n').split(' ')))

#     get_result(data)



from sys import stdin

from collections import deque





# 重みなしグラフの隣接リスト

# 0-indexed nodes

def get_adj_list(num_nodes, data, undirected=True):

    graph = [[] for _ in range(num_nodes)]

    for val in data:

        x, y = val

        graph[x-1] = graph[x-1] + [y-1]

        if undirected:

            graph[y-1] = graph[y-1] + [x-1]

    return graph





# BFS

def breadth_first_search(adj_list, start_node):

    N = len(adj_list)

    order = [-1] * N # a bfs ordering of each vertex

    parent = [-1] * N # parent of each vertex in the bfs search tree

    depth = [-1] * N # the depth of each vertex

    q = deque([(start_node, -1, 0)]) # (vertex, parent, depth)

    num = 0 # current ordering

    while q:

        v, p, d = q.popleft()

        if order[v] < 0: # visited v for the first time

            order[v] = num

            parent[v] = p

            depth[v] = d

            num += 1

            for u in adj_list[v]:

                if order[u] >= 0: continue

                q.append((u, v, d+1))

    return order, parent, depth



# BFS pypyでAC

def get_result(data):

    N, X, Y = data

    _data = [[i, i+1] for i in range(1, N)]

    _data += [[X, Y]]

    adj_list = get_adj_list(N, _data)

    dist_cnt = [0 for i in range(N)]

    for i in range(N):

        _, _, depth = breadth_first_search(adj_list, i)

        for j in range(i, N):

            dist_cnt[depth[j]] += 1

    for i in range(1, N):

        print((dist_cnt[i]))





if __name__ == '__main__':

    data = list(map(int, stdin.readline().rstrip('\n').split(' ')))

    get_result(data)

from sys import stdin
from collections import deque


def get_adj_list(num_nodes, data, undirected=True):
    # adj_list ex) {1:[2,3,4], 2:[1,4,5], 3:[1,4], 4:[1,2,3,5], 5:[2,4]}
    graph = {}
    for i in range(num_nodes):
        graph[i + 1] = []
    for val in data:
        x, y = val
        graph[x] = graph[x] + [y]
        if undirected:
            graph[y] = graph[y] + [x]
    return graph


def breadth_first_search(adj_list, start_node):
    dist = {}
    queue = deque([(start_node, 0)])
    while len(queue) > 0:
        v, d = queue.popleft()
        if v in dist:
            continue
        dist[v] = d
        for u in adj_list[v]:
            if u not in dist:
                queue.append((u, d + 1))
    return dist


# bfs
def get_result(data):
    N, X, Y = data
    _data = [[i, i + 1] for i in range(1, N)]
    _data += [[X, Y]]
    adj_list = get_adj_list(N, _data)
    dist_cnt = [0 for i in range(N)]
    for i in range(N):
        dist = breadth_first_search(adj_list, i + 1)
        for j in range(i, N):
            dist_cnt[dist[j + 1]] += 1
    for i in range(1, N):
        print((dist_cnt[i]))


# 解説のコード
# def get_result(data):
#     N, X, Y = data
#     dist_cnt = [0 for i in range(N)]
#     for i in range(1, N+1):
#         for j in range(i+1, N+1):
#             min_dist = min([j-i, abs(X-i) + 1 + abs(Y-j), abs(Y-i) + 1 + abs(X-j)])
#             dist_cnt[min_dist] += 1
#     for i in range(1, N):
#         print(dist_cnt[i])
if __name__ == "__main__":
    data = list(map(int, stdin.readline().rstrip("\n").split(" ")))
    get_result(data)

# from sys import stdin
# # 解説のコード
# def get_result(data):
#     N, X, Y = data
#     dist_cnt = [0 for i in range(N)]
#     for i in range(1, N+1):
#         for j in range(i+1, N+1):
#             min_dist = min([j-i, abs(X-i) + 1 + abs(Y-j), abs(Y-i) + 1 + abs(X-j)])
#             dist_cnt[min_dist] += 1
#     for i in range(1, N):
#         print(dist_cnt[i])
# if __name__ == '__main__':
#     data = list(map(int, stdin.readline().rstrip('\n').split(' ')))
#     get_result(data)
from sys import stdin
from collections import deque

# 重みなしグラフの隣接リスト
# 0-indexed nodes
def get_adj_list(num_nodes, data, undirected=True):
    graph = [[] for _ in range(num_nodes)]
    for val in data:
        x, y = val
        graph[x - 1] = graph[x - 1] + [y - 1]
        if undirected:
            graph[y - 1] = graph[y - 1] + [x - 1]
    return graph


# BFS
def breadth_first_search(adj_list, start_node):
    N = len(adj_list)
    order = [-1] * N  # a bfs ordering of each vertex
    parent = [-1] * N  # parent of each vertex in the bfs search tree
    depth = [-1] * N  # the depth of each vertex
    q = deque([(start_node, -1, 0)])  # (vertex, parent, depth)
    num = 0  # current ordering
    while q:
        v, p, d = q.popleft()
        if order[v] < 0:  # visited v for the first time
            order[v] = num
            parent[v] = p
            depth[v] = d
            num += 1
            for u in adj_list[v]:
                if order[u] >= 0:
                    continue
                q.append((u, v, d + 1))
    return order, parent, depth


# BFS pypyでAC
def get_result(data):
    N, X, Y = data
    _data = [[i, i + 1] for i in range(1, N)]
    _data += [[X, Y]]
    adj_list = get_adj_list(N, _data)
    dist_cnt = [0 for i in range(N)]
    for i in range(N):
        _, _, depth = breadth_first_search(adj_list, i)
        for j in range(i, N):
            dist_cnt[depth[j]] += 1
    for i in range(1, N):
        print((dist_cnt[i]))


if __name__ == "__main__":
    data = list(map(int, stdin.readline().rstrip("\n").split(" ")))
    get_result(data)

-from sys import stdin -from collections import deque - - -def get_adj_list(num_nodes, data, undirected=True): -    # adj_list ex) {1:[2,3,4], 2:[1,4,5], 3:[1,4], 4:[1,2,3,5], 5:[2,4]} -    graph = {} -    for i in range(num_nodes): -        graph[i + 1] = [] -    for val in data: -        x, y = val -        graph[x] = graph[x] + [y] -        if undirected: -            graph[y] = graph[y] + [x] -    return graph - - -def breadth_first_search(adj_list, start_node): -    dist = {} -    queue = deque([(start_node, 0)]) -    while len(queue) > 0: -        v, d = queue.popleft() -        if v in dist: -            continue -        dist[v] = d -        for u in adj_list[v]: -            if u not in dist: -                queue.append((u, d + 1)) -    return dist - - -# bfs -def get_result(data): -    N, X, Y = data -    _data = [[i, i + 1] for i in range(1, N)] -    _data += [[X, Y]] -    adj_list = get_adj_list(N, _data) -    dist_cnt = [0 for i in range(N)] -    for i in range(N): -        dist = breadth_first_search(adj_list, i + 1) -        for j in range(i, N): -            dist_cnt[dist[j + 1]] += 1 -    for i in range(1, N): -        print((dist_cnt[i])) - - -# 解説のコード +# from sys import stdin +# # 解説のコード +# if __name__ == '__main__': +#     data = list(map(int, stdin.readline().rstrip('\n').split(' '))) +#     get_result(data) +from sys import stdin +from collections import deque + +# 重みなしグラフの隣接リスト +# 0-indexed nodes +def get_adj_list(num_nodes, data, undirected=True): +    graph = [[] for _ in range(num_nodes)] +    for val in data: +        x, y = val +        graph[x - 1] = graph[x - 1] + [y - 1] +        if undirected: +            graph[y - 1] = graph[y - 1] + [x - 1] +    return graph + + +# BFS +def breadth_first_search(adj_list, start_node): +    N = len(adj_list) +    order = [-1] * N  # a bfs ordering of each vertex +    parent = [-1] * N  # parent of each vertex in the bfs search tree +    depth = [-1] * N  # the depth of each vertex +    q = deque([(start_node, -1, 0)])  # (vertex, parent, depth) +    num = 0  # current ordering +    while q: +        v, p, d = q.popleft() +        if order[v] < 0:  # visited v for the first time +            order[v] = num +            parent[v] = p +            depth[v] = d +            num += 1 +            for u in adj_list[v]: +                if order[u] >= 0: +                    continue +                q.append((u, v, d + 1)) +    return order, parent, depth + + +# BFS pypyでAC +def get_result(data): +    N, X, Y = data +    _data = [[i, i + 1] for i in range(1, N)] +    _data += [[X, Y]] +    adj_list = get_adj_list(N, _data) +    dist_cnt = [0 for i in range(N)] +    for i in range(N): +        _, _, depth = breadth_first_search(adj_list, i) +        for j in range(i, N): +            dist_cnt[depth[j]] += 1 +    for i in range(1, N): +        print((dist_cnt[i])) + +