#1 AC; #2、3、4、5 TLE
#include <bits/stdc++.h>
using namespace std;
vector <int> ans;
const int N = 1e5 + 5;
struct node
{
int l, r, value, pos;
} tr[N << 2];
int n;
int a[N], cnt;
void build(int root, int l, int r)
{
tr[root].l = l, tr[root].r = r;
if (l == r)
{
tr[root].value = a[l];
tr[root].pos = l;
return ;
}
int mid = (l + r) >> 1;
build(root << 1, l, mid);
build(root << 1 | 1, mid + 1, r);
if (tr[root << 1].value < tr[root << 1 | 1].value)
{
tr[root].value = tr[root << 1].value;
tr[root].pos = tr[root << 1].pos;
}
else
{
tr[root].value = tr[root << 1 | 1].value;
tr[root].pos = tr[root << 1 | 1].pos;
}
if (root == 1)
{
ans.push_back(tr[1].value);
a[tr[1].pos] = 1e9;
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i ++)
cin >> a[i];
for (int i = 1; i <= n; i ++)
build(1, 1, n);
for (int i = 0; i < ans.size(); i ++)
cout << ans[i] << " ";
return 0;
}