#include <stdio.h>
#define swap(x,y) (SWAP(&(x),&(y)))
void SWAP(int * p_x, int * p_y)
{
int tmp = *p_x;
*p_x = *p_y;
*p_y = tmp;
return;
}
void i_sort(int L[], int left, int right)
{
for (int i = left + 1; i <= right; i++)
{
int tmp = L[i];
int j;
for (j = i; j > 0 && tmp < L[j - 1]; j--)
L[j] = L[j - 1];
L[j] = tmp;
}
return ;
}
int t_div(int L[], int left, int right)
{
int cen = (left + right) / 2;
if (L[left] > L[cen])
swap(L[left], L[cen]);
if (L[left] > L[right])
swap(L[left], L[right]);
if (L[cen] > L[right])
swap(L[cen], L[right]);
swap(L[cen], L[right]);
return L[right] ;
}
void q_sort(int L[], int left, int right)
{
if (right - left >= 20)
{
int pivot = t_div(L, left, right);
int i = left, j = right - 1;
while (1)
{
while (L[++i] < pivot)
;
while (L[--j] > pivot)
;
if (i < j)
swap(L[i], L[j]);
else
break;
}
swap(L[i], L[right]);
q_sort(L, left, i - 1);
q_sort(L, i + 1, right);
}
else
{
i_sort(L, left, right);
return ;
}
}
int main(void)
{
int N;
int num[100000];
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d", &num[i]);
q_sort(num, 0, N - 1);
for (int i = 0; i < N; i++)
{
printf("%d", num[i]);
if (i < N - 1)
putchar(' ');
else
putchar('\n');
}
return 0;
}