/*
#include<stdio.h>
int a[1000],L, R, p,temp;
int begin;
int end;
int main()
{
for(int i; i<a[i]; i++)
{
scanf("%d", &a[i]);
}
p =(L+R/2);
L = begin;
R = end;
while(L<R)
{
while(a[L]<a[p] && L<R)
L++;
while(a[R]>=a[p] && L<R)
R--;
if(L<R)
{
temp = a[L];
a[L] = a[R];
a[R] = temp;
if(L==p)
p=R;
}
}
temp = a[p];
a[p] = a[R];
a[R] = temp;
for(int i=0; i<a[i]; i++)
{
scanf("%d",a[i]);
return R;
}
}
*/
#include<stdio.h>
int size, i=0;
int list[10000]={0};
int partition(int a[], int begin, int end)
{
int pivot, temp, L, R, t;
L = begin;
R = end;
pivot = (int)((begin+end)/2.0);
printf("\n [%d단계:pivot=%d]\n" , ++i, a[pivot]);
while(L<R)
{
while((a[L]<a[pivot])&&(L<R))
L++;
while((a[R]>=a[pivot])&&(L<R))
R--;
if(L<R)
{
temp = a[L];
a[L] = a[R];
a[R] = temp;
if(L==pivot)
{
pivot = R;
}
}
}
temp = a[pivot];
a[pivot]=a[R];
a[R]=temp;
for(t=0;t<size;t++)
{
printf("%d",a[t]);
printf("\n");
}
return R;
}
void quickSort(int a[], int begin, int end)
{
int p;
if(begin<end)
{
p=partition(a,begin,end);
quickSort(a, begin, p-1);
quickSort(a,p+1, end);
}
}
void main()
{
scanf("%d", &size);
for(i=0; i<size; i++) {
scanf("%d", &list[i]);
}
quickSort(list,0,size-1);
for(i=0; i<size; i++) {
printf("%d ", list[i]);
}
getchar();
}