#include <stdio.h>

#define XORSWAP(a, b) ((a)^=(b),(b)^=(a),(a)^=(b))

static int heap_size;

int parent(int i){
	return i >> 1;
}

int left(int i){
	return i << 1;
}

int right(int i){
	return (i << 1) | 0x1;
}

void heapify(int *h, int i){
	int l = left(i);
	int r = right(i);
	int largest;

	if(l <= heap_size && h[l] > h[i])
		largest = l;
	else
		largest = i;

	if(r <= heap_size && h[r] > h[largest])
		largest = r;

	if(largest != i){
		XORSWAP(h[i], h[largest]);
		heapify(h, largest);
	}
}

void make_heap(int *h, int len){
	int i;
	heap_size = len;

	for(i = len/2; i >= 1; i--)
		heapify(h, i);
}

int main(int argc, char *argv[]){
	int i;
	int h[11] = {0, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10};

	make_heap(h, 11);
	for(i = 1; i < 11; i++)
        printf((i + 1 == 11) ? "%d" : "%d ", h[i]);

	scanf("%d", &i);
	return 0;
}
