////插入排序
//#include <bits/stdc++.h>
//using namespace std;
//int n;
//int a[10010];
//int main() {
// cin >> n;
// for (int i = 1; i <= n; i++) {
// cin >> a[i];
// }
// for (int i = 2; i <= n; i++) {
// int j = i - 1;
// int t = a[j];
// while (j >= 1 && a[j] > t) {
// a[j + 1] = a[j];
// j--;
// }
// a[j + 1] = t;
// }
// for (int i = 1; i <= n; i++) {
// cout << a[i] << " ";
// }
// return 0;
//}
////选择排序
//#include <bits/stdc++.h>
//using namespace std;
//int n;
//int a[110];
//int main() {
// cin >> n;
// for (int i = 1; i <= n; i++) {
// cin >> a[i];
// }
// for (int i = 1; i < n; i++) {
// int index = i;
// for (int j = i; j <= n; j++) {
// if (a[j] < a[index]) {
// index = j;
// }
// }
// swap(a[i], a[index]);
// }
// for (int i = 1; i <= n; i++) {
// cout << a[i] << " ";
// }
// return 0;
//}
////冒泡排序
//#include <bits/stdc++.h>
//using namespace std;
//int n;
//int a[110];
//int main() {
// cin >> n;
// for (int i = 1; i <= n; i++) {
// cin >> a[i];
// }
// for (int i = 1; i < n; i++) {
// bool f = false;
// for (int j = 1; j <= n - i; j++) {
// if (a[j] > a[j + 1]) {
// swap(a[j], a[j + 1]);
// f = true;
// }
// }
// if (!f)break;
// }
// for (int i = 1; i <= n; i++) {
// cout << a[i] << " ";
// }
// return 0;
//}
////计数排序
#include <bits/stdc++.h>
using namespace std;
int n, x, ma;
int a[100005];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> x;
a[x]++;
ma = max(x, ma);
}
for (int i = 0; i <= ma; i++) {
for (int j = 1; j <= a[i]; j++) {
cout << i << " ";
}
}
return 0;
}