/*
1.归并排序也是一种分治的思想,首先是确定整个数组的中间位置;
2.再递归执行整个函数
3.合并
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
static int N = 100010;
static int[] array = new int[N];
static int[] tmp = new int[N];
public static void mergeSort(int l, int r){
if(l >= r) return;
int mid = l + r >> 1;
mergeSort(l, mid);
mergeSort(mid+1, r);
int i = l, j = mid + 1, k = 0;
while(i <= mid && j <= r){
if(array[i] <= array[j]) tmp[k++] = array[i++];
else tmp[k++] = array[j++];
}
while(i <= mid) tmp[k++] = array[i++];
while(j <= r) tmp[k++] = array[j++];
for(i = l, j = 0; i <= r; i++, j++ ) array[i] = tmp[j];
}
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(in.readLine());
String[] arry = in.readLine().split(" ");
for(int i = 0; i < n; i++){
array[i] = Integer.parseInt(arry[i]);
}
mergeSort(0, n-1);
for(int i = 0; i < n; i++){
System.out.print(array[i] + " ");
}
}
}