#include<fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
typedef int heap[500009];
heap h;
inline int tata(int nod)
{
return nod/2;
}
inline int fiu_st(int nod)
{
return nod*2;
}
inline int fiu_dr(int nod)
{
return nod*2+1;
}
inline int maxim()
{
return h[1];
}
void sift(heap h,int n,int k)
{
int son = 0;
do{
son = 0;
if(fiu_st(k) <= n){
son = fiu_st(k);
if(fiu_dr(k) <= n && h[fiu_dr(k)] > h[fiu_st(k)])
son = fiu_dr(k);
if(h[son] <= h[k])
son = 0;
}
if(son){
swap(h[son],h[k]);
k = son;
}
}while(son);
}
void percolate(heap h,int n,int k){
int key = h[k];
while((k > 1) && (key > h[tata(k)]))
{
h[k] = h[tata(k)];
k = tata(k);
}
h[k] = key;
}
void build(heap h,int n)
{
for(int i = n/2 ; i > 0 ; i--){
sift(h,n,i);
}
}
void del(heap h,int n,int k)
{
h[k] = h[n];
--n;
if((k > 1) && (h[k] > h[tata(k)]))
percolate(h,n,k);
else
sift(h,n,k);
}
void adauga(heap h,int n,int val)
{
h[++n] = val;
percolate(h,n,n);
}
void heap_sort(heap h,int n)
{
build(h,n);
for(int i = n ; i >= 2 ; --i){
swap(h[1],h[i]);
sift(h,i-1,1);
}
}
int main()
{
int n,i;
in>>n;
for(i = 1 ; i <= n ; i++)
in>>h[i];
heap_sort(h,n);
for(i = 1 ; i <= n ; i++)
out<<h[i]<<" ";
return 0;
}