#include <stdio.h>
#define N 500000
void  maxHeapify(int*,int,int);
void  buildMaxHeap(int*,int);

int main(){
  int a,A[N],i;

  scanf("%d",&a);
  for(i=1;i<=a;i++)
    scanf("%d",&A[i]);
  buildMaxHeap(A,a);
  for(i=1;i<=a;i++)
    printf(" %d",A[i]);
  printf("\n");
  return 0;
}


void maxHeapify(int* A,int i,int H){
  int l,r,largest,k;

  
  l = i*2;    //左の子ノードleft(i)
  r = i*2+1;  //右の子ノードright(i)
  
  // 左の子、自分、右の子で値が最大のノードを選ぶ
  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 の子の方が値が大きい場合
    k=A[i];
    A[i]=A[largest];
    A[largest]=k;
    maxHeapify(A,largest,H); // 再帰的に呼び出し
  }
}

void buildMaxHeap(int* A,int H){
  int i;
  
  for(i=H/2;i>=1;i--)
    maxHeapify(A,i,H);
}

