#include <cstdio>
const int maxn = 10010;
int a[maxn];
#define swap(a, b) { int temp = a; a = b; b = temp; } //交换
int partition(int left ,int right) {
int i = left;
int temp = a[right]; //把尾部的数看成基准数
for(int j = left; j < right; j++) {
if (a[j] < temp) {
swap(a[j], a[i]);
i++;
}
}
swap(a[i], a[right]);
return i; //返回基准数的位置
}
void quicksort(int left, int right) {
if (left < right) {
int i = partition(left, right); //划分
quicksort(left, i-1); //分治:左边的继续递归划分
quicksort(i+1, right); //分治:右边的继续递归划分
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
quicksort(1, n); //快速排序
for(int i = 1; i <= n; i++) printf("%d ", a[i]);
return 0;
}