
#include<bits/stdc++.h>
using namespace std;
void HeapAdjust(int* a, int i, int n)
{
int lchild = 2 * i;
int rchild = 2 * i + 1;
int max = i;
if (i <= n / 2) {
if (lchild <= n && a[lchild] > a[max])
max = lchild;
if (rchild <= n && a[rchild] > a[max])
max = rchild;
if (max != i) {
swap(a[i], a[max]);
HeapAdjust(a, max, n);
}
}
}
void BuildHeap(int* a, int n)
{
for (int i = n / 2; i >= 1; i--){
HeapAdjust(a, i, n);
}
}
void HeapSort(int* a, int n)
{
BuildHeap(a, n);
for (int i = n; i > 1; i--){
swap(a[1], a[i]);
HeapAdjust(a, 1, i - 1);
for (int j = 1; j <= n; j++){
if (j == 1)
cout << a[j];
else
cout << " " << a[j];
}
cout << endl;
}
}
int main()
{
int a[100], n;
while (~scanf("%d", &n)){
for (int i = 1; i <= n; i++)
cin >> a[i];
HeapSort(a, n);
}
return 0;
}

#include <stdio.h>
#include <string.h>
int Judge(int a[],int b[],int n) {
int i,flag=0,pos=0;
for(i=1; i<n; i++) {
if(b[i-1]<=b[i]) {
flag=1;
} else {
pos=i;
break;
}
}
if(flag) {
for(i=pos; i<n; i++) {
if(a[i]!=b[i]) {
pos=0;
break;
}
}
} else
pos=0;
return pos;
}
void NextInsertionSort(int a[],int pos,int n) {
int i,tmp=a[pos];
int index;
for(i=0; i<pos; i++) {
if(a[i]>tmp) {
index=i;
break;
}
}
for(i=pos-1; i>=index; i--) {
a[i+1]=a[i];
}
a[index]=tmp;
}
int k=0;
void Merge(int a[],int low,int high,int mid) {
int i,j;
int c[100]= {0};
for(i=low; i<=high; i++) {
c[i]=a[i];
}
i=low,j=mid+1;
while(i<=mid&&j<=high) {
if(c[i]<=c[j]) {
a[k++]=c[i];
i++;
} else {
a[k++]=c[j];
j++;
}
}
while(i<=mid) {
a[k++]=c[i];
i++;
}
while(j<=high) {
a[k++]=c[j];
j++;
}
}
int GetMergeLen(int a[],int n) {
int i,j;
for(j=2; j<=n; j*=2) {
for(i=j; i<n; i=i+2*j)
{
if(a[i-1]>a[i])
break;
}
if(i<n)
break;
}
return j;
}
void NextMergeSort(int a[],int low,int high,int len) {
int i;
for(i=low; i<=high; i+=len) {
int mid=(i+i+len-1)/2;
if(i+len-1<=high) {
Merge(a,i,i+len-1,mid);
}
else if(mid<high) {
Merge(a,i,high,mid);
}
}
}
int main() {
int n;
scanf("%d",&n);
int i;
int a[n],b[n];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0; i<n; i++) {
scanf("%d",&a[i]);
}
for(i=0; i<n; i++) {
scanf("%d",&b[i]);
}
int pos=Judge(a,b,n);
if(pos) {
printf("Insertion Sort\n");
NextInsertionSort(b,pos,n);
} else {
printf("Merge Sort\n");
int len=2*GetMergeLen(b,n);
NextMergeSort(b,0,n-1,len);
}
for(i=0; i<n; i++) {
if(i)
printf(" ");
printf("%d",b[i]);
}
return 0;
}