#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#define maxn 110
using namespace std;
int a[maxn];

void BubbleSort(int *arr,int len)//冒泡排序
{
    for(int i=0;i<len;i++)
    {
        for(int j = 0; j<len-i-1;j++)
        {
            if(a[j]>a[j+1])swap(a[j],a[j+1]);
        }
    }
}

void SelectSort(int *arr,int len)//选择排序
{
    for(int i=0;i<len;i++)
    {
        int minn = arr[i];
        for(int j=i+1;j<len;j++)
        {
            if(minn > arr[j])
            {
                minn = arr[j];
                swap(arr[i],arr[j]);
            }
        }
    }
}


int Huafen(int* arr,int l,int r)//快排
{
    int pri = arr[l];
    while(l<r)
    {
        while(l<r && pri <= arr[r])r--;
        arr[l] = arr[r];
        while(l<r && pri >= arr[l])l++;
        arr[r] = arr[l];
    }
    arr[l] = pri;
    return l;
}

void Qsort(int *arr,int l,int r)
{
    int mid;
    if(l < r)
    {
        mid = Huafen(arr, l, r);
        Qsort(arr, l, mid -1);
        Qsort(arr, mid + 1, r);
    }
}

void heapAdjust(int *arr,int root ,int len)//从小到大排序使用大根堆
{
    int tmp = arr[root];
    for(int i=(root + 1)*2 -1;i<len;i = (i+1)*2-1)
    {
        if(i <len-1 && arr[i]<arr[i+1])//找出大的
        {
            i++;
        }
        if(tmp >= arr[i])break;
        else{
            arr[root] = arr[i];
            root = i;
        }
    }
    arr[root] = tmp;
}

void buildHeap(int *arr,int len)
{
    for(int i=(len/2)-1;i>=0;i--)
    {
        heapAdjust(arr,i,len);
    }
}

void HeapSort(int *arr,int len){
    int tmp;
    buildHeap(arr,len);
    for(int i=len-1;i>0;i--)
    {
        swap(arr[0],arr[i]);
        heapAdjust(arr,0,i);
    }
}


int main() {
   int n;
   while(cin>>n)
   {
        for(int i=0;i<n;i++)cin>>a[i];
       // Qsort(a,0,n-1);
      //  BubbleSort(a,n);
      //  SelectSort(a,n);
      HeapSort(a,n);
        for(int i=0;i<n;i++)
        {
            cout<<a[i]<<" ";
        }cout<<endl;
   }
}
// 64 位输出请用 printf("%lld")