#include <stdio.h>

#define MAX 2000000

void maxHeapify(int*,int);
int left(int);
int right(int);

int H;

int main()
{
  int A[MAX+1],i;

  scanf("%d",&H);
  for(i=1;i<=H;i++){
    scanf("%d",&A[i]);
    }
  for(i=H/2;i>=1;i--){
    maxHeapify(A,i);
  }
  for(i=1;i<=H;i++){
    printf(" %d",A[i]);
    }
  printf("\n");
  return 0;
}

void maxHeapify(int A[],int i){
  int l,r,largest,t;

  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;
// i の子の方が値が大きい場合if
  if(largest != i){
    t = A[i];
    A[i] = A[largest];
    A[largest] = t;
    maxHeapify(A, largest); // 再帰的に呼び出し
  }
}

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

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

