#include using namespace std; #include #define rep(i, l, r) for (int i = (l); i < (r); i++) #define ll long long #define all(x) x.begin(), x.end() #define siz(x) (int)x.size() template bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } template bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } const int inf = 1e9; const ll INF = 4e18; int main() { int N; cin >> N; vector P(N); rep(i, 0, N) { cin >> P[i]; P[i]--; } atcoder::dsu d(N); rep(i, 0, N) { d.merge(i, P[i]); } vector> G = d.groups(); vector ans(N+1); for (vector& g : G) { sort(all(g)); int x = 0; rep(i, 0, siz(g)-1) x = gcd(x, g[i+1] - g[i]); for (int d = 1; d * d <= x; d++) { if (x % d) continue; ans[d]+=siz(g)-1; if (x != d * d) ans[x/d]+=siz(g)-1; } } rep(i, 1, N) cout << ans[i] << endl; }