#include <bits/stdc++.h>
using namespace std;
const int dim = 500005;
unsigned int v[dim], seg_tree[4*dim];
void build(int node, int lef, int rig) {
if (lef == rig) {
seg_tree[node] = lef;
return;
}
int mid = (lef + rig) / 2;
build(2*node, lef, mid);
build(2*node+1, mid+1, rig);
seg_tree[node] = (v[seg_tree[2*node]] <= v[seg_tree[2*node+1]] ? seg_tree[2*node] : seg_tree[2*node+1]);
}
void del(int node, int lef, int rig, int pos) {
if (lef == rig) {
seg_tree[node] = 0;
return;
}
int mid = (lef + rig) / 2;
if (mid >= pos)
del(2*node, lef, mid, pos);
else
del(2*node + 1, mid+1, rig, pos);
seg_tree[node] = (v[seg_tree[2*node]] <= v[seg_tree[2*node+1]] ? seg_tree[2*node] : seg_tree[2*node+1]);
}
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> v[i];
build(1, 1, n);
v[0] = -1;
for (int i = n; i; --i) {
int pos = seg_tree[1];
cout << v[pos] << ' ';
del(1, 1, n, pos);
}
cout << endl;
}
int main() {
assert(freopen("algsort.in", "r", stdin));
assert(freopen("algsort.out", "w", stdout));
cin.tie(0);
ios_base::sync_with_stdio(false);
solve();
return 0;
}