#include<bits/stdc++.h>
using namespace std;
vector<int> tempstep,tempstep1;
vector<int> ppp1;
int n;
bool insertjudge(vector<int> &a){
int flag=0;
for(int i=1;i<n;i++){
int temp=a[i];int j=i;
if(i!=1&&a==tempstep) flag=1;
while(j>0&&a[j-1]>temp){
a[j]=a[j-1];
j--;
}
a[j]=temp;
if(flag==1) return true;
}
if(flag==0) return false;
}
void downadjust(int low,int high){
int i=low;int j=2*i;
while(j<=high){
if(j+1<=high&&ppp1[j+1]>ppp1[j]){
j=j+1;
}
if(ppp1[j]>ppp1[i]){
swap(ppp1[j],ppp1[i]);
i=j;j=i*2;
}else{
break;
}
}
}
void heapsort(){
for(int i=n/2;i>=1;i--){
downadjust(i,n);
}
int flag=0;
for(int i=n;i>1;i--){
if(i!=n&&ppp1==tempstep1) flag=1;
swap(ppp1[1],ppp1[i]);
downadjust(1,i-1);
if(flag==1) return;
}
}
int main()
{
freopen("in.txt","r",stdin);
cin>>n;
vector<int> initial;initial.resize(n);
for(int i=0;i<n;i++) cin>>initial[i];
tempstep.resize(n);
for(int i=0;i<n;i++) cin>>tempstep[i];
vector<int> ppp=initial;
if(insertjudge(ppp)==true){
cout<<"Insertion Sort"<<endl;
cout<<ppp[0];
for(int i=1;i<n;i++){
cout<<' '<<ppp[i];
}
}else{
cout<<"Heap Sort"<<endl;
ppp1.resize(n+1);ppp1[0]=-1;
for(int i=1;i<=n;i++)
ppp1[i]=initial[i-1];
tempstep1.push_back(-1);
for(int i=1;i<=n;i++){
tempstep1.push_back(tempstep[i-1]);
}
heapsort();
cout<<ppp1[1];
for(int i=2;i<=n;i++){
cout<<' '<<ppp1[i];
}
}
return 0;
}