#include<stdio.h>
void Split(int left,int a[],int right);
int Quicksort(int left,int a[],int right);
int main()
{
int N;
scanf("%d",&N);
int a[N];
int i;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
Split(0,a,N-1);
for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}
void Split(int left,int a[],int right)
{
int middle;
if(left<right)
{
middle=Quicksort(left,a,right);
Split(left,a,middle-1);
Split(middle+1,a,right);
}
else
return;
}
int Quicksort(int left,int a[],int right)
{
int tag=a[left];
int temp;
for(;;)
{
if(left<right)
{
while(a[right]>tag)
right--;
//保证循环结束时 left = right
if(left>=right)
break;
temp=a[right];
a[right]=a[left];
a[left++]=temp;
}
else
break;
if(left<right)
{
while(a[left]<tag)
left++;
//保证循环结束时 left = right
if(left>=right)
break;
temp=a[left];
a[left]=a[right];
a[right--]=temp;
}
else
break;
}
//返回 left 或 right 均为分界点
return right;
}