#include<stdio.h>
#define MAX 2000000

int H,A[MAX+1];

int parent(int i) { return i/2; }
int left(int i) { return i*2; }
int right(int i) { return i*2+1; }
void maxHeapify(int);
void buildMaxHeap();

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

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

void maxHeapify(int i)
{
  int largest;
  int l = left(i);
  int r = right(i);
  int x;
  //自分、左の子、右の子の中から値が最大ノードを選ぶ
  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の子の方が値が大きい場合
    //printf("yes\n");
    x = A[i];
    A[i] = A[largest];
    A[largest] = x;
    maxHeapify(largest); //再帰的に呼び出し
  }
}

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

