#include <stdio.h>
#include <stdlib.h>
 
#define height 4
#define MAX (1<<height)  
 
int t[MAX+1]; 
int sz = 0;
 
void swap(int *x, int *y){
    int tmp = *x;
    *x = *y;
    *y = tmp;
}
 
void initTree(int n){
    int i;
    for(i=0;i<MAX;i++){
        t[i] = -1;
    }
}
 
void printA(){
    int i;
    for(i=1;i<=sz;i++) printf("%d ",t[i]);
    printf("\n");
}
 
void printT(int i){
    int x = i;
    while(x/2!=0){
        printf("  ");
        x/=2;
    }
    printf("%d\n",t[i]);
}
 
int goP(int i){
    if(i/2 == 0) return 0;
    else return i/2;
}
 
int goL(int i){
    if(2*i >= MAX) return 0;
    else return 2*i;
}
 
int goR(int i){
    if(2*i+1 >= MAX) return 0;
    else return 2*i+1;
}
 
void preOrder(int i){
    if(t[i] == -1) return;
    printT(i);
    preOrder(goL(i));
    preOrder(goR(i));
}
 
void inOrder(int i){
    if(t[i] == -1) return;
    inOrder(goL(i));
    printT(i);
    inOrder(goR(i));
}
 
void postOrder(int i){
    if(t[i] == -1) return;
    postOrder(goL(i));
    postOrder(goR(i));
    printT(i);
}
 
void insBT(int x){
    int k,i = 1;
    for(k=0;k<height;k++){
        if(t[i]==-1){
            t[i] = x;
            sz++;
            return;
        }
        if(x < t[i]) i = goL(i);
        else i = goR(i);
    }
    printf("Error : too high -> %d\n",x);
}
 
int popHeap(){
    int root = t[1];  
    t[1] = t[sz];  
    t[sz] = -1;  
    sz--;  
    int i = 1;
    while (i*2<=sz){
        int left=i*2;
        int right=i*2+1;
        int largest=i;
        if(left<=sz&&t[left]>t[largest]){
            largest=left;
        }
        if(right<=sz&&t[right]>t[largest]){
            largest=right;
        }
        if (largest != i){
            swap(&t[i],&t[largest]);
            i=largest;
        }else{
            break; 
        }
    }
    return root;
}

 void pushHeap(int x){
    if (sz + 1 >= MAX) {
        printf("Heap is full.\n");
        return;  
    }
    sz++; 
    t[sz]=x;
    int i=sz;
    while (i>1&&t[i]>t[i/2]){
        swap(&t[i],&t[i/2]);
        i=i/2;
    }
}

int main(void){
    int i,x,n;
    scanf("%d",&n);
    // 木の初期化
    initTree(n);
    for(i=0;i<n;i++){
        scanf("%d",&t[i+1]);
    }
    sz = n;
    // 中間順で表示
	inOrder(1);
 
	// pop
	int a=popHeap();
	printf("pop : %d\n",a);
	inOrder(1);
 
	a = popHeap();
	printf("pop : %d\n",a);
 
	inOrder(1);
 
	printf("push : 100\n");
	pushHeap(100);
	inOrder(1);
 
	printf("push : 30\n");
	pushHeap(30);
	inOrder(1);
    return 0;
}