#include <stdio.h>

int A[500000];
int H;

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

}

void buildMaxHeap(int A[])
{

  int i;
  
  for(i=H/2;i>=0;i--){
    maxHeapify(A, i);
  }

}

int main()
{

  int i;

  scanf("%d",&H);
  for(i=0;i<H;i++){
    scanf("%d",&A[i]);
  }
  
  buildMaxHeap(A);

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

}
    

