import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test_10989 {
public static void main(String[] args) throws Exception {
int[] count = new int[10001]; // 10000보다 작거나 같은 자연수
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder("");
int number = Integer.parseInt(bf.readLine()); //입력의 갯수
//int temp = 0;
for( int i = 0 ; i < number ; i++) {
int n = Integer.parseInt(bf.readLine()); //숫자
//temp = temp < n ? n :temp;
count[n]++;
}
//for(int i = 1 ; i < temp+1 ; i++) {
for( int i = 1 ; i < 10001 ; i++) {
for( int j = 0 ; j < count[i] ; j++) {
sb.append(i+"\n");
}
}
System.out.println(sb);
}
}
입력받은 수의 최댓값 만큼 반복문을 돌리려 했지만 최댓값을 체크하는 조건문이 계속 반복되어 오히려 성능이 떨어졌다. 카운팅 정렬이 의외로 큰 수에도 적용되길래 카운팅 정렬으로 해결해 보았다.