#include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using vi = vector; using vvi = vector; using vvvi = vector; using vll = vector; using vvll = vector; using vvvll = vector; using vmi = vector; using vvmi = vector; using vvvmi = vector; #define all(a) (a).begin(), (a).end() #define rep2(i, m, n) for (int i = (m); i < (n); ++i) #define rep(i, n) rep2(i, 0, n) #define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i) #define drep(i, n) drep2(i, n, 0) void solve(){ } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector pos(n, false); vi v(n); rep(i, n){ cin >> v[i]; v[i]--; } int itr = 0; vvi yaku(n+1); rep2(i, 1, n+1){ for(int j = i; j <=n; j+=i)yaku[j].push_back(i); } vi ans(n, 0); while(itr < n){ if(pos[itr]){ itr++; continue; } pos[itr] = true; if(v[itr] == itr){ itr++; continue; } int now = itr; vi d; while(true){ d.push_back(abs(v[now]-now)); now = v[now]; pos[now] = true; if(now == itr)break; } unordered_map mp; for(auto i : d){ for(auto j : yaku[i])mp[j]++; } for(auto i : mp){ if(i.second == d.size()) ans[i.first] += d.size()-1; } itr++; } rep(i, n-1)cout <