#include<stdio.h>
#define MAX 2000000
void maxHeapify(int);
int H,A[MAX+1];
int main(){
  int i;
  scanf("%d",&H);
  for(i=1;i<=H;i++)
    scanf("%d",&A[i]);
  for(i=H/2;i>=1;i--)
    maxHeapify(i);
  for(i=1;i<=H;i++)
    printf(" %d",A[i]);
  printf("\n");
  return 0;
}

void maxHeapify(int i){
  int l,r,largest,a;
  l=i*2;
  r=i*2+1;
  // 左の子、自分、右の子で値が最大のノードを選ぶ
  if(l <= H && A[l] > A[i])
    largest=l;
  else largest=i;
  if(r <= H && A[r] > A[largest])
    largest=r;
  if(largest != i) // i の子の方が値が大きい場合
    {
      a=A[i];
      A[i]=A[largest];
      A[largest]=a;
      maxHeapify(largest);
    }
}
