# import sys

# sys.setrecursionlimit(10 ** 6)

int1 = lambda x: int(x) - 1

def II(): return int(eval(input()))



def MI(): return list(map(int, input().split()))

def MI1(): return list(map(int1, input().split()))



def LI(): return list(map(int, input().split()))

def LLI(rows_number): return [LI() for _ in range(rows_number)]





def solve():

    n = II()

    A = LI()



    j = {}

    for a in A:

        j[a] = j.setdefault(a, 0) + 1



    # j = sorted(j.items())

    # print(j)

    for i in range(n):

        print((j.get(i+1, 0)))



if __name__ == '__main__':

    solve()

import sys

sys.setrecursionlimit(10 ** 6)

# input = sys.stdin.readline    ####

int1 = lambda x: int(x) - 1

def II(): return int(eval(input()))



def MI(): return list(map(int, input().split()))

def MI1(): return list(map(int1, input().split()))



def LI(): return list(map(int, input().split()))

def LI1(): return list(map(int1, input().split()))

def LLI(rows_number): return [LI() for _ in range(rows_number)]



INF = float('inf')



def solve():

    n = II()

    A = LI()

    ans = [0] * n

    for i, a in enumerate(A):

        ans[a-1] += 1



    for a in ans:

        print(a)





if __name__ == '__main__':

    solve()

# import sys
# sys.setrecursionlimit(10 ** 6)
int1 = lambda x: int(x) - 1


def II():
    return int(eval(input()))


def MI():
    return list(map(int, input().split()))


def MI1():
    return list(map(int1, input().split()))


def LI():
    return list(map(int, input().split()))


def LLI(rows_number):
    return [LI() for _ in range(rows_number)]


def solve():
    n = II()
    A = LI()
    j = {}
    for a in A:
        j[a] = j.setdefault(a, 0) + 1
    # j = sorted(j.items())
    # print(j)
    for i in range(n):
        print((j.get(i + 1, 0)))


if __name__ == "__main__":
    solve()

import sys

sys.setrecursionlimit(10**6)
# input = sys.stdin.readline    ####
int1 = lambda x: int(x) - 1


def II():
    return int(eval(input()))


def MI():
    return list(map(int, input().split()))


def MI1():
    return list(map(int1, input().split()))


def LI():
    return list(map(int, input().split()))


def LI1():
    return list(map(int1, input().split()))


def LLI(rows_number):
    return [LI() for _ in range(rows_number)]


INF = float("inf")


def solve():
    n = II()
    A = LI()
    ans = [0] * n
    for i, a in enumerate(A):
        ans[a - 1] += 1
    for a in ans:
        print(a)


if __name__ == "__main__":
    solve()

-# import sys -# sys.setrecursionlimit(10 ** 6) +import sys + +sys.setrecursionlimit(10**6) +# input = sys.stdin.readline    #### +def LI1(): +    return list(map(int1, input().split())) + + + + +INF = float("inf") -    j = {} -    for a in A: -        j[a] = j.setdefault(a, 0) + 1 -    # j = sorted(j.items()) -    # print(j) -    for i in range(n): -        print((j.get(i + 1, 0))) +    ans = [0] * n +    for i, a in enumerate(A): +        ans[a - 1] += 1 +    for a in ans: +        print(a)