#include<stdio.h>
#include<stdlib.h>

int H,pre(int i),left(int i),right(int i);
void swap(int *a, int *b);
void maxHeapify(int *A, int i);
void buildmaxHeap(int *A);

int main(){
  int i,*A;
  scanf("%d",&H);
  A=malloc(sizeof(int)*(H+1));
  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;
}

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

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

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

void swap(int *a,int *b){
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
}

void maxHeapify(int *A, int i){
  int l,r,largest;
  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){
    swap(&A[i],&A[largest]);
    maxHeapify(A,largest);
  }
}

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

