//1.快速排序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i=0;i<n;i++) {
a[i] = sc.nextInt();
}
qsort(a,0,n-1);
for(int i=0;i<n;i++) {
System.out.print(a[i]+" ");
}
sc.close();
}
private static int getPos(int[] a,int left,int right) {
int mid = a[right];
while(left<right) {
while(left<right && a[left]<=mid) {
left++;
}
a[right] = a[left];
while(left<right && a[right]>=mid) {
right--;
}
a[left] = a[right];
}
a[left] = mid;
return left;
}
private static void qsort(int[] a,int left,int right) {
if(left<right) {
int mid = getPos(a,left,right);
qsort(a,left,mid-1);
qsort(a,mid+1,right);
}
}
}
//归并排序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i=0;i<n;i++) {
a[i] = sc.nextInt();
}
mergeSort(a,0,n-1);
for(int i=0;i<n;i++) {
System.out.print(a[i]+" ");
}
sc.close();
}
static void mergeSort(int[] a,int start, int end) {
if(start < end) {
int pos = (start+end)/2;
mergeSort(a,start,pos);
mergeSort(a, pos+1, end);
merge(a, start, pos, end);
}
}
static void merge(int[] a, int p,int q,int r) {
int n1 = q - p + 1 + 1;//左边长度
int n2 = r - q + 1;//右边长度 0 1 3
int[] L = new int[n1];
int[] R = new int[n2];
int i,j;
for(i=0;i<n1-1;i++) {
L[i] = a[p+i];
}
for(j=0;j<n2-1;j++) {
R[j] = a[q+j+1];
}
L[n1-1] = 1000000;
R[n2-1] = 1000000;
i=0; j=0;
for(int k=p; k<=r;k++) {
if(L[i] <= R[j]) {
a[k]=L[i];
i++;
}else{
a[k]=R[j];
j++;
}
}
}
}