//schi-infoarena
#include<bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int NMAX = 30000;
vector<int> v(NMAX + 1);
vector<int> ans(NMAX + 1);
vector<int> segment_tree(4 * NMAX + 5);
void AINT(int node, int left, int right){
if(left == right){
segment_tree[node] = 1;
}
else{
segment_tree[node] = right - left + 1;
int mid = (left + right) / 2;
AINT(2 * node, left, mid);
AINT(2 * node + 1, mid + 1, right);
}
}
int update(int node, int left, int right, int k, int i){
if(left == right){
segment_tree[node]--;
ans[left] = i;
}
else{
int mid = (left + right) / 2;
if(k <= segment_tree[2 * node]){
segment_tree[node]--;
update(2 * node, left, mid, k, i);
}
else{
segment_tree[node]--;
update(2 * node + 1, mid + 1, right, k - segment_tree[2 * node], i);
}
}
}
int main(){
int n;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> v[i];
}
AINT(1, 1, n);
for(int i = n; i >= 1; i--){
update(1, 1, n, v[i], i);
}
for(int i = 1; i <= n; i++){
fout << ans[i] << '\n';
}
return 0;
}