#include<stdio.h>
 
int A[500001];
int n;
 
int left(int);

int right(int);

void maxHeapify(int);

void buildMaxHeap(void);
 
int main(){
 
  int i;

  scanf("%d", &n);

  for(i = 1; i <= n; i++){

    scanf("%d", &A[i]);

  }

  buildMaxHeap();

  for(i = 1; i <= n; i++){

    printf(" %d", A[i]);

  }

  printf("\n");

  return 0;

}

int left(int x){

  return (2 * x);

}
 
int right(int x){
  
  return (2 * x + 1);

}

void maxHeapify(int i){

  int l, r, largest, tmp;

  l = left(i);

  r = right(i);

  if((l <= n) && (A[l] > A[i]))
    largest = l;
  else
    largest = i;

  if((r <= n) && (A[r] > A[largest]))
    largest = r;

  if(largest != i){

    tmp = A[i];

    A[i] = A[largest];

    A[largest] = tmp;

    maxHeapify(largest);

  }

}
 
void buildMaxHeap(){

  int i;

  for(i = (n / 2); i >= 1; i--){

    maxHeapify(i);

  }

}