#include<stdio.h>

int A[20000000];
int H;

int parent(int i){
  return i/2;
}

int left(int i){
  return 2*i;
}

int right(int i){
  return 2*i+1;
}
 
void maxHeapify(int A[], int i){
  int l, r, largest;
  int tmp;

  l = left(i);
  r = 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){
    tmp = A[i];
    A[i] = A[largest];
    A[largest] = tmp;
    maxHeapify(A, largest);
  }
}

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


int main(){
  int i;

  scanf("%d", &H);

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

  buildMaxHeap(A);

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

  return 0;
}