#include <stdio.h>
#define MAX 2000000

int H,A[MAX];

void maxHeapify(i)
{
  int temp,largest,l,r;

  l = 2*i;
  r = 2*i+1;

  // 左の子、自分、右の子で値が最大のノードを選ぶ
  if( l <= H && A[l] > A[i] ) largest = l;
  else largest = i;
  if( r <= H && A[r] > A[largest] ) largest = r;

  if( largest != i )// i の子の方が値が大きい場合
  {
    temp = A[i];
    A[i] = A[largest];
    A[largest] = temp;
    maxHeapify(largest); // 再帰的に呼び出し
  }
}

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

