#include<iostream>#include<vector>#include<algorithm>usingnamespace std;
vector<int> vec, v2;voidswap(int i,int j){int temp = vec[i];
vec[i]= vec[j];
vec[j]= temp;}voidheapify(int n,int i){int max = i;int c1 = i *2+1;int c2 = i *2+2;if(c1 < n && vec[c1]> vec[max]){
max = c1;}if(c2 < n && vec[c2]> vec[max]){
max = c2;}if(max != i){swap(i, max);heapify(n, max);}}voidbuild_heap(vector<int>& vec,int n){for(int i =(n -2)/2; i >=0; i--){heapify(n, i);}}intmain(){int n;scanf("%d",&n);
vec.resize(n);
v2.resize(n);for(int i =0; i < n; i++){scanf("%d",&vec[i]);}for(int i =0; i < n; i++){scanf("%d",&v2[i]);}int index =1;for(int i =1; i < n; i++){if(v2[i]< v2[i -1]){
index = i;break;}}if(index !=1){printf("Insertion Sort\n");sort(vec.begin(), vec.begin()+ index +1);}else{//堆排序printf("Heap Sort\n");bool flag =false;build_heap(vec, n);for(int i = n -1; i >=0; i--){swap(i,0);heapify(i,0);if(flag)break;int j =0;for(j; j < n && vec[j]== v2[j]; j++);if(j == n) flag =true;}}printf("%d", vec[0]);for(int i =1; i < n; i++){printf(" %d", vec[i]);}return0;}