struct PQueue_node{
node value[M7];
int size=0;
void up(int x){
while(x>1&&value[x]<value[x>>1]){
node temp;
temp=value[x];
value[x]=value[x>>1];
value[x>>1]=temp;
x>>=1;
}
}
void push(node x){
value[++size]=x;
up(size);
}
void pop(){
value[1]=value[size];
--size;
int x=1;
while(x<<1<size){
if(x<<1==size||value[x<<1]<value[x<<1|1]){
node temp;
temp=value[x];
value[x]=value[x<<1];
value[x<<1]=temp;
x<<=1;
}
else{
node temp;
temp=value[x];
value[x]=value[x<<1|1];
value[x<<1|1]=temp;
x<<=1;
++x;
}
}
}
node top(){return value[1];}
bool empty(){return !size;}
}Q;