import java.io.*;
import java.util.NoSuchElementException;

class heapsort
{ 
    int n;        // Länge der Halde
    double [] a;  // Halde ist auf a[1] .. a[n] gespeichert.
 
void sort(int nn)
{   verhalde(nn);
    try {
       for (int i=nn; i>=1; i--) a[i] = entferneMin();     
    }
    catch (NoSuchElementException e) {} // kann nicht vorkommen.
}

// oder direkter:
void sort2(int nn)
{ verhalde(nn);
  for (n=nn-1; n>=1; n--) { vertausche(1,n+1); zugroß(1); }
}
  
void verhalde(int nn)
{   n = nn;
    for (int i=nn; i>=1; i--) zugroß(i);
}

void einfügen(double x)
{   if (n>=a.length-1) throw new RuntimeException("Feldüberlauf");
    a[++n] = x;
    zuklein(n);
}  

double entferneMin() throws NoSuchElementException
{   if (n<=0) throw new NoSuchElementException();
    double x = a[1];
    n--;
    if (n>0) {
        a[1] = a[n+1];
        zugroß(1);
    }
    return x;
}
   
void zuklein(int i) // a[i] ist möglicherweise kleiner als sein Vorgänger.
{   if (i==1) return;
    int Vorgänger = i/2;
    if (a[i]<a[Vorgänger]) {
        vertausche(i,Vorgänger);
        zuklein(Vorgänger);
    }
}

void zugroß(int i) // a[i] ist möglicherweise größer als seine Nachfolger.
{   int kleinsterNachfolger;
    if (2*i+1 <= n) {
        if (a[2*i]<a[2*i+1]) kleinsterNachfolger = 2*i;
        else                 kleinsterNachfolger = 2*i+1;
    }
    else if (2*i <= n) kleinsterNachfolger = 2*i;
    else return;
    if (a[i] > a[kleinsterNachfolger]) {
        vertausche(i, kleinsterNachfolger);
        zugroß(kleinsterNachfolger);
    }
}

void vertausche(int i, int j)
{ double x=a[i]; a[i]=a[j]; a[j]=x; }

public static void main (String[] args) throws IOException
{
    System.out.println("Sortieren mit einer Halde (heapsort).");
    heapsort x = new heapsort();
    // Einlesen
      IntReader input = new IntReader(args);
      int länge = input.readInt();
        
    // Inititalisieren array:
      x.a = new double [länge+1];
      for (int i=1; i<=länge; i++) x.a[i] = input.readInt();
    
    x.sort(länge);
    
    // Ausdrucken:
      for (int i=länge; i>=1; i--) System.out.print(x.a[i]+" ");
      System.out.println();     
}

}
