树上二分
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N];
int tr[N], ans[N];
int add(int x, int v) {
for (; x <= n; x += x & -x) tr[x] += v;
}
int query(int x) {
int res = 0;
for (; x; x -= x & -x) res += tr[x];
return res;
}
int kth(int l, int r, int k) {
if (l == r) return r;
int mid = l + r >> 1;
int cnt = query(mid) - query(l - 1);
if (cnt >= k) return kth(l, mid, k);
return kth(mid + 1, r, k - cnt);
}
int main() {
cin >> n;
for (int i = 2; i <= n; i ++ ) cin >> a[i];
for (int i = 1; i <= n; i ++ ) add(i, 1);
for (int i = n; i > 1; i -- ) {
a[i] ++ ;
ans[i] = kth(1, n, a[i]);
add(ans[i], -1);
}
ans[1] = kth(1, n, 1);
for (int i = 1; i <= n; i ++ ) cout << ans[i] << endl;
return 0;
}