#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <ctime>
#include <ratio>
#include <chrono>
#include <fstream>
using namespace std;
//int m3(vector<int>& Vector, int left, int right) {
// int mid = (left + right) / 2;
//
// if (Vector[left] > Vector[mid])
// swap(Vector[left], Vector[mid]);
//
// if (Vector[mid] > Vector[right])
// swap(Vector[mid], Vector[right]);
//
// if (Vector[left] > Vector[right])
// swap(Vector[left], Vector[right]);
//
//
// swap(Vector[mid], Vector[right-1]);
// return Vector[right - 1];
//}
//int part2(vector<int>& Vector, int left, int right){
// int pivot = m3(Vector, left, right), j = left-1;
// for(int i=left;i<=right;i++) {
// if (Vector[i] <= pivot) {
// swap(Vector[j++], Vector[i]);
// }
// }
// swap(Vector[j], Vector[right]);
// return j;
//}
//void sortare(vector<int>& Vector, int left, int right){
// if (left<right){
// int index = part2(Vector, left, right);
//
// sortare(Vector, index+1, right);
// sortare(Vector, left, index-1);
// }
//}
//int m3(vector<int>& Vector, int left, int right) {
// int mid = (left + right) / 2;
//
// if (Vector[left] > Vector[mid])
// swap(Vector[left], Vector[mid]);
//
// if (Vector[mid] > Vector[right])
// swap(Vector[mid], Vector[right]);
//
// if (Vector[left] > Vector[right])
// swap(Vector[left], Vector[right]);
//
//
// swap(Vector[mid], Vector[right-1]);
// return Vector[right - 1];
//}
//int part2(vector<int>& Vector, int left, int right){
// int pivot = m3(Vector, left, right), i = left-1;
// for (int j = left; j < right; j++) {
// if (Vector[j] <= pivot) {
// swap(Vector[i++], Vector[j]);
// }
// }
// swap(Vector[i+1], Vector[right]);
// return i + 1;
//}
//void sortare(vector<int>& Vector, int left, int right){
// if (left<right){
// int pi = part2(Vector, left, right);
//
// sortare(Vector, left, right);
// }
//}
int m3(vector<int>& Vector, int left, int right) {
int mid = (left + right) / 2;
if (Vector[left] > Vector[mid])
swap(Vector[left], Vector[mid]);
if (Vector[mid] > Vector[right])
swap(Vector[mid], Vector[right]);
if (Vector[left] > Vector[right])
swap(Vector[left], Vector[right]);
swap(Vector[mid], Vector[right-1]);
return Vector[right - 1];
}
int part2(vector<int>& Vector, int left, int right){
int pivot = m3(Vector, left, right);
int i = left-1;
for(int j=left;j<=right;j++) {
if (Vector[j] < pivot) {
swap(Vector[i+1], Vector[j]);
i += 1;
}
}
for(int j=left;j<=right;j++) {
if (Vector[j] == pivot){
swap(Vector[i+1], Vector[j]);
i += 1;
}
}
return i;
}
void sortare(vector<int>& Vector, int left, int right){
if (left<right){
int index = part2(Vector, left, right);
sortare(Vector, index+1, right);
sortare(Vector, left, index-1);
}
}
int main(){
ifstream f("algsort.in");
ofstream g("algsort.out");
vector<int> V;
int a, N;
f>>N;
while(N>0){
f>>a;
V.push_back(a);
N--;
}
sortare(V, 0, V.size()-1);
for(long unsigned int i=0; i<V.size(); i++){
g<<V[i]<<" ";
}
return 0;
}