#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <set>
using namespace std;
//图的特点是出度全为1,且每个点至多在一个环上,且从点出发路径唯一且经过唯一的环。对于在环上的点就是本身,不在环上就是第一个经过的环上的点
int main () {
int n;
cin >> n;
int* edge = new int[n + 1];
int* in_degree = new int[n + 1];
int* ans = new int[n + 1];
memset(edge, 0, (n + 1) * sizeof(int));
memset(in_degree, 0, (n + 1) * sizeof(int));
//ans表示是不是环
memset(ans, 0, (n + 1) * sizeof(int));
for (int i = 1; i <= n; i++) {
cin >> edge[i];
in_degree[edge[i]]++;
}
for (int i = 1; i <= n; i++) {
//开始遍历
if (!in_degree[i]) {
int* vis = new int[n + 1];
memset(vis, 0, (n + 1) * sizeof(int));
stack<int> s;;
int p = i;
while (!ans[p] && !vis[p]) {
vis[p] = 1;
s.push(p);
p = edge[p];
}
bool flag = (ans[p] && ans[p] == p) ? false : true;
while (!s.empty()) {
int p2 = s.top();
s.pop();
ans[p2] = flag ? p2 : p;
if (p == p2) flag = false;
}
}
}
for (int i = 1; i <= n; i++) {
cout << (ans[i] == 0 ? i : ans[i]) << " " ;
}
}