from itertools import pairwise from math import gcd, isqrt class dsu: n = 1 parent_or_size = [-1 for i in range(n)] def __init__(self, N): self.n = N self.parent_or_size = [-1 for i in range(N)] def merge(self, a, b): assert 0 <= a < self.n, "0<=a 0: result2.append(result[i]) return result2 def divisors(n: int) -> set[int]: div = set() for i in range(1, isqrt(n) + 1): if n % i == 0: div.update([i, n // i]) return div N = int(input()) P = [int(s) - 1 for s in input().split()] uf = dsu(N) for i, p in enumerate(P): uf.merge(i, p) answers = [0] * N for group in uf.groups(): if len(group) <= 1: continue g = gcd(*[abs(x - y) for x, y in pairwise(group)]) for div in divisors(g): answers[div] += 1 print(*answers[1:], sep="\n")