#include<bits/stdc++.h>
using namespace std;
int a[12000],n;
void qusort(int left, int right)
{
int x = a[left], i = left, j = right;
if(left >= right)
return;
while(i < j)
{
while(i < j&&a[j] >= x)
{
j --;
}
a[i] = a[j];
while(i < j&&a[i] <= x)
{
i ++;
}
a[j]= a[i];
}
a[i] = x;
qusort(left,i-1);
qusort(i+1,right);
}
void insert_sort( )
{
for(int i = 1; i < n; i ++)
{
int temp = a[i],j;
for(j = i-1; j >= 0; j --)
{
if(a[j]> temp)
a[j+1] = a[j];
else
break;
}
a[j+1] =temp;
}
}
void shell_sort( )
{
for(int step = n/2; step >=1; step = step/2)
{
for(int i = 0; i <step; i ++)
{
for(int j = i+step; j < n; j +=step)
{
int temp = a[j],k;
for(k = j -step; k >= 0; k -= step)
{
if(a[k] > temp)
a[k+step] = a[k];
else
break;
}
a[k+step] = temp;
}
}
}
}
void adjust_heap(int n, int i)
{
int j = i*2;
while(j <= n)
{
if(j+1 <= n&&a[j+1] > a[j])
j++;
if(a[j] > a[i])
swap(a[i],a[j]);
else
break;
i = j;
j = i*2;
}
}
void heap_sort( )
{
for(int i = n/2; i >= 1; i --)
{
adjust_heap(n,i);
}
for(int i = n; i >= 1; i --)
{
swap(a[1],a[i]);
adjust_heap(i-1,1);
}
}
void merge_sort( int left, int right)
{
if(left >= right)
return;
int mid = (left+right)/2;
merge_sort(left,mid);
merge_sort(mid+1,right);
int b[right-left +1];
for(int i = left; i<= right; i ++)
{
b[i-left] = a[i];
}
int i = left, j = mid+1;
for(int k = left; k<= right; k ++)
{
if(i > mid)
{
a[k] = b[j-left];
j++;
}
else if(j > right)
{
a[k] = b[i-left];
i ++;
}
else if(b[i-left] > b[j-left])
{
a[k] = b[j-left];
j ++;
//ans += (mid+1-i);求逆序对数
}
else
{
a[k] = b[i-left];
i ++;
}
}
}
int main()
{
int i;
scanf("%d",&n);
for(i = 0; i< n; i ++)
{
scanf("%d",&a[i]);
}
//qusort(0,n-1);
// insert_sort( );
// shell_sort( );
// heap_sort();
//merge_sort(0,n-1);
for(i = 0; i < n; i ++)
{
if(i == n-1)
printf("%d\n",a[i]);
else
printf("%d ",a[i]);
}
return 0;
}