#include<stdio.h>
#define MAX 500001

void buildMaxHeap(void);
void maxHeapify(int);

int a[MAX];
int h;

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 buildMaxHeap(){
  int i;
  for(i=h/2;i>=1;i--){
    maxHeapify(i);
  }
}

void maxHeapify(int i){
  int l, r; //lは左の子のノード番号, rは右の子のノード番号
  int largest; //自分と左の子と右の子でkeyが最大のノードの番号
  int v;
  
  l = 2 * i;
  r = 2 * i + 1;

  //keyが最大のノードを選ぶ
  if(l <= h && a[l] > a[i]) largest = l;
  else largest = i;
  if(r <= h && a[r] > a[largest]) largest = r;

  //iのこの方が大きい時a[i]とa[largest]を交換
  if(largest != i){
    v = a[i];
    a[i] = a[largest];
    a[largest] = v;
    maxHeapify(largest);
  }
}

