#include <iostream>
#include <algorithm>
using namespace std;
int ori[110], cur[110];
void adjustdown(int k, int max)
{
ori[0] = ori[k];
int i;
for(i = k * 2; i <= max; i *= 2)
{
if(i + 1 <= max && ori[i + 1] > ori[i])
{
i++;
}
if(ori[i] < ori[0])
{
break;
}
ori[k] = ori[i];
k = i;
}
ori[k] = ori[0];
}
void buildheap(int n)
{
int i;
for(i = n / 2; i >= 1; i--)
{
adjustdown(i, n);
}
}
int judge(int n)
{
int i;
for(i = 1; i <= n; i++)
{
if(ori[i] != cur[i])
{
return 0;
}
}
return 1;
}
void heapsort(int n)
{
buildheap(n);
int i, flag, temp;
for(i = n; i >= 2; i--)
{
flag = judge(n);
temp = ori[1];
ori[1] = ori[i];
ori[i] = temp;
adjustdown(1, i - 1);
if(flag == 1)
{
break;
}
}
}
int main()
{
int n;
scanf("%d", &n);
int i;
for(i = 1; i <= n; i++)
{
scanf("%d", &ori[i]);
}
for(i = 1; i <= n; i++)
{
scanf("%d", &cur[i]);
}
for(i = 2; i <= n; i++)
{
if(cur[i - 1] > cur[i])
{
break;
}
}
int j;
for(j = i; j <= n; j++)
{
if(ori[j] != cur[j])
{
break;
}
}
if(j == n + 1)
{
printf("Insertion Sort\n");
sort(ori + 1, ori + i + 1);
}
else
{
printf("Heap Sort\n");
heapsort(n);
}
for(i = 1; i <= n; i++)
{
if(i > 1)
{
printf(" ");
}
printf("%d", ori[i]);
}
printf("\n");
system("pause");
return 0;
}