2018/9/7
// 知道了根堆的意思,用二叉树节点间关系即可解决
#include <iostream>
using namespace std;
int tree[1005];
int n;
bool first;
void PostOrder(int cur){
if(cur > n)
return;
PostOrder(2*cur);
PostOrder(2*cur + 1);
if(first){
cout << tree[cur];
first = false;
}else{
cout << ' ' << tree[cur];
}
}
int main(){
int time;
cin >> time >> n;
bool small, big;
for(int cnt = 0; cnt < time; cnt++){
for(int i = 1; i <= n; i++)
cin >> tree[i];
small = false;
big = false;
for(int i = 1; i <= (n/2 + 1); i++){
if(2*i <= n){
if(tree[i] > tree[2*i])
big = true;
else if(tree[i] < tree[2*i] )
small = true;
}
if(2*i + 1 <= n){
if(tree[i] > tree[2*i])
big = true;
else if(tree[i] < tree[2*i] )
small = true;
}
}
first = true;
if(big && small){
cout << "Not Heap" << endl;
PostOrder(1);
cout << endl;
continue;
}
if(big){
cout << "Max Heap" << endl;
PostOrder(1);
cout << endl;
}
if(small){
cout << "Min Heap" << endl;
PostOrder(1);
cout << endl;
}
}
return 0;
}