#include <stdio.h>
#include <stdlib.h>

// 중복되는거 삭제한다면?
void Merge(int*array,int left, int middle, int right){
	int length =(right-left+1);
	int* sorted = (int*) malloc(sizeof(int)*(length));
	int i=left; int j = middle+1;
	int seq=0;
	while(i <=middle && j <=right){
	//	printf("i is %d, j is %d\n",i,j);
	//	printf("%d %d compared\n",array[i],array[j]);
		if(array[i] <= array[j]){
			sorted[seq] = array[i];
			i++;
		} else {
			sorted[seq] = array[j];
			j++;
		}
		//printf("sorted[%d] is %d\n",seq,sorted[seq]);
		seq++; 
	}
	//printf("present i : %d, j:%d and middle is %d\n",i,j,middle);
	//printf("\n");
	if(i> middle){
		while( j<=right){ sorted[seq] = array[j]; 
		//printf("sorted[%d] is %d\n",seq,sorted[seq]); 
		j++; seq++; }
	}
	else {
		while(i<= middle ){ sorted[seq] = array[i]; 
		//printf("sorted[%d] is %d\n",seq,sorted[seq]);
		i++; seq++; }
	}
	//printf("result is ");
	seq =0;
	for(int k =left; k<right+1; k++){
	 array[k] = sorted[seq]; seq ++;
	 //printf("%d ",array[k]);
	}
	//printf("\n");
}
void mergesort(int* array, int left,int right){
	if(left < right){
		int half = (left + right)/2;
		mergesort(array,left,half);
		mergesort(array,half+1,right);
		//printf("merge begin "); 
			
		Merge(array,left,half,right);
	}
}
int main(void) {
	int N;
	scanf("%d\n",&N);
	int* array = (int*) malloc(sizeof(int)*N);
	for(int i =0; i<N; i++){
		scanf("%d\n",&array[i]);
	}
	
	mergesort(array,0,(N-1));
	for(int i =0; i<(N) ; i++){ printf("%d\n",array[i]); } 
	return 0;
}
