#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void Merge(int a[], int low, int mid, int high)
{
int* temp = (int*)malloc(sizeof(a));
int start = low;
int end = high;
int highstart = mid + 1;
int i = low;
while (low <= mid && highstart <= high)
{
if (a[low] <= a[highstart])
temp[i++] = a[low++];
else
temp[i++] = a[highstart++];
}
while (low <= mid)
temp[i++] = a[low++];
while (highstart <= high)
temp[i++] = a[highstart++];
for (int i = start; i <= end; i++)
{
a[i] = temp[i];
}
}
void MergeSort(int a[], int low, int high)
{
if (low < high)
{
int mid = (low + high) / 2;
MergeSort(a, low, mid);
MergeSort(a, mid + 1, high);
Merge(a, low, mid, high);
}
}
void print(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d\t", a[i]);
}
}
int main()
{
int n;
scanf("%d", &n);
int* a = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
scanf("%d", a + i);
}
MergeSort(a, 0, n - 1);
print(a, n);
return EXIT_SUCCESS;
}