#include <stdio.h>
int H,count=0;
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 i,int *a){
	int l,r;
	int max=i;
	int temp;
	l=left(i);
	r=right(i);
	if(l<=H && a[l]>a[i]){
		max=l;
	}
	if(r<=H && a[r]>a[max]){
		max=r;
	}
	//printf("amax:%d ai:%d\n",a[max],a[i]);
	if (max!=i){
		temp=a[i];
		a[i]=a[max];
		a[max]=temp;
		count++;
	}
	//printf("amax:%d ai:%d\n",a[max],a[i]);
}

void buildMaxH(int *a){
	int i;
		for(i=H/2;i>=1;i--){
			//printf("i: %d\n",i);
			maxHeapify(i,a);
		}
		while(count!=0){
		for(i=H/2;i>=1;i--){
			maxHeapify(i,a);
		}
			count--;
		}
	}



int main(void){
	int n,i;
	scanf("%d",&n);
	H=n;
	int a[n+1];
	for(i=1;i<n+1;i++){
		scanf("%d",&a[i]);
	}
	buildMaxH(a);
	for(i=1;i<n;i++){
		printf("%d ",a[i]);
	}
	printf("%d\n",a[n]);
	return 0;
}