#include<stdio.h>
void maxHeapify(int * ,int );

int H;

int main()
{
  int A[2000001];//１オリジンだから＋１
  int i;
 
  scanf("%d",&H);
  for(i=1;i<=H;i++) scanf("%d",&A[i]);
  
  /* buildMaxHeap(A) 配列 A を max-ヒープに変換 */
  for(i=H/2;i>=1;i--){
    maxHeapify(A,i);
  }

  for(i=1;i<=H;i++){
    printf(" %d",A[i]);
  }
  printf("\n");

  return 0;
}
  
void maxHeapify(int *A,int i)
{
  int l,r,largest;
  int temp; //交換用
  l = 2*i;
  r = 2*i+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 ){
      temp =  A[i];
    A[i] = A[largest];
    A[largest] = temp;
  maxHeapify(A, largest); // 再帰的に呼び出し
  }
  return;
}

