#include <bits/stdc++.h>
using namespace std;
 
vector<int> countVisitedShops(vector<int>& paths) {
    int n = paths.size();
    vector<int> dp(n, 0), state(n, 0); // 0=unvisited, 1=visiting, 2=done
    vector<int> stackOrder;
 
    function<int(int)> dfs = [&](int u) -> int {
        if (state[u] == 2) return dp[u];       // already computed
        if (state[u] == 1) {                   // found cycle
            int cnt = 1;
            for (int i = stackOrder.size() - 1; i >= 0; i--) {
                cnt++;
                if (stackOrder[i] == u) break;
            }
            dp[u] = cnt - 1;
            return dp[u];
        }
 
        state[u] = 1;
        stackOrder.push_back(u);
        int v = paths[u];
        int res = dfs(v);
        if (dp[u] == 0) dp[u] = res + (state[v] != 1 ? 1 : 0);
        state[u] = 2;
        stackOrder.pop_back();
        return dp[u];
    };
 
    for (int i = 0; i < n; i++)
        if (state[i] == 0) dfs(i);
 
    return dp;
}
 
int main() {
    int n;
    cin >> n;
    vector<int> paths(n);
    for (int i = 0; i < n; i++) cin >> paths[i];
 
    vector<int> result = countVisitedShops(paths);
    for (int x : result) cout << x << " ";
    cout << endl;
    return 0;
}
 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBjb3VudFZpc2l0ZWRTaG9wcyh2ZWN0b3I8aW50PiYgcGF0aHMpIHsKICAgIGludCBuID0gcGF0aHMuc2l6ZSgpOwogICAgdmVjdG9yPGludD4gZHAobiwgMCksIHN0YXRlKG4sIDApOyAvLyAwPXVudmlzaXRlZCwgMT12aXNpdGluZywgMj1kb25lCiAgICB2ZWN0b3I8aW50PiBzdGFja09yZGVyOwoKICAgIGZ1bmN0aW9uPGludChpbnQpPiBkZnMgPSBbJl0oaW50IHUpIC0+IGludCB7CiAgICAgICAgaWYgKHN0YXRlW3VdID09IDIpIHJldHVybiBkcFt1XTsgICAgICAgLy8gYWxyZWFkeSBjb21wdXRlZAogICAgICAgIGlmIChzdGF0ZVt1XSA9PSAxKSB7ICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGN5Y2xlCiAgICAgICAgICAgIGludCBjbnQgPSAxOwogICAgICAgICAgICBmb3IgKGludCBpID0gc3RhY2tPcmRlci5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgICAgY250Kys7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tPcmRlcltpXSA9PSB1KSBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkcFt1XSA9IGNudCAtIDE7CiAgICAgICAgICAgIHJldHVybiBkcFt1XTsKICAgICAgICB9CgogICAgICAgIHN0YXRlW3VdID0gMTsKICAgICAgICBzdGFja09yZGVyLnB1c2hfYmFjayh1KTsKICAgICAgICBpbnQgdiA9IHBhdGhzW3VdOwogICAgICAgIGludCByZXMgPSBkZnModik7CiAgICAgICAgaWYgKGRwW3VdID09IDApIGRwW3VdID0gcmVzICsgKHN0YXRlW3ZdICE9IDEgPyAxIDogMCk7CiAgICAgICAgc3RhdGVbdV0gPSAyOwogICAgICAgIHN0YWNrT3JkZXIucG9wX2JhY2soKTsKICAgICAgICByZXR1cm4gZHBbdV07CiAgICB9OwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIGlmIChzdGF0ZVtpXSA9PSAwKSBkZnMoaSk7CgogICAgcmV0dXJuIGRwOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICB2ZWN0b3I8aW50PiBwYXRocyhuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBjaW4gPj4gcGF0aHNbaV07CgogICAgdmVjdG9yPGludD4gcmVzdWx0ID0gY291bnRWaXNpdGVkU2hvcHMocGF0aHMpOwogICAgZm9yIChpbnQgeCA6IHJlc3VsdCkgY291dCA8PCB4IDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==