#include<stdio.h>
#include<stdlib.h>
typedef struct pp{
  double k;
}P;
P *A;
void max(P *A,int j);
void build(P *A);
int n,i;
int main(){
  
  scanf("%d\n",&n);
  
  A=(P*)malloc((n*n)*sizeof(P));
  for(i=0;i<n*n;i++) A[i].k=3.14;
  for(i=1;i<=n;i++) scanf("%lf",&A[i].k);
  build(A);
  for(i=1;i<n;i++)printf(" %.0f",A[i].k);
  printf(" %.0f\n",A[n].k);

  return 0;
}
void max(P *A,int j){
  int left,right,largest;
  P swap;
 
  left=j*2;
  right=j*2+1;
  if(left<=n&&A[left].k>A[j].k) largest=left;
  else largest=j;
  if(right<=n&&A[right].k>A[largest].k) largest=right;
  if(A[j*2].k==3.14);
  else if(largest!=j){
    swap=A[j];
    A[j]=A[largest];
    A[largest]=swap;
    max(A,largest);
  }
}
void build(P *A){
  int j;
  for(j=n/2;j>=1;j--) max(A,j);
}

