#include<bits/stdc++.h>
using namespace std;
mt19937_64 rd(time(0));
int rand(int L, int R){
return L + rd() % (R - L + 1);
}
int n;
vector<int> arr;
vector<int> slow_merge_sort(vector<int>& arr, int length){
if(length <= 1) return arr;
if(length == 2){
if(arr[0] < arr[1]) swap(arr[0], arr[1]);
return arr;
}
int pivot = 3*length/4;
int times[2]; memset(times, 0, sizeof times);
vector<int> newVector[2];
vector<int> resultVector;
for(int i = 0; i < pivot; i++) newVector[0].push_back(arr[i]);
for(int i = pivot; i < length; i++) newVector[1].push_back(arr[i]);
newVector[0] = slow_merge_sort(newVector[0], newVector[0].size());
newVector[1] = slow_merge_sort(newVector[1], newVector[1].size());
while(resultVector.size() < length){
int cur_index = 0;
int cur_value = (int) -1e9;
for(int i = 0; i < 2; i++){
if(times[i] >= newVector[i].size()) continue;
if(cur_value <= newVector[i][times[i]]){
cur_value = newVector[i][times[i]];
cur_index = i;
}
}
resultVector.push_back(cur_value);
times[cur_index]++;
}
return resultVector;
}
bool isSorted(){
for(int i = 1; i < n; i++){
if(arr[i - 1] < arr[i]) return 0;
}
return 1;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
for(int i = 0; i < n; i++){
int value; cin >> value;
arr.push_back(value);
}
while(!isSorted()){
arr = slow_merge_sort(arr, n);
}
for(int i = 0; i < n; i++) cout << arr[i] << ' ';
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCm10MTk5MzdfNjQgcmQodGltZSgwKSk7CmludCByYW5kKGludCBMLCBpbnQgUil7CiAgICByZXR1cm4gTCArIHJkKCkgJSAoUiAtIEwgKyAxKTsKfQoKaW50IG47CnZlY3RvcjxpbnQ+IGFycjsKCnZlY3RvcjxpbnQ+IHNsb3dfbWVyZ2Vfc29ydCh2ZWN0b3I8aW50PiYgYXJyLCBpbnQgbGVuZ3RoKXsKICAgIGlmKGxlbmd0aCA8PSAxKSByZXR1cm4gYXJyOwogICAgaWYobGVuZ3RoID09IDIpewogICAgICAgIGlmKGFyclswXSA8IGFyclsxXSkgc3dhcChhcnJbMF0sIGFyclsxXSk7CiAgICAgICAgcmV0dXJuIGFycjsKICAgIH0KCiAgICBpbnQgcGl2b3QgPSAzKmxlbmd0aC80OwogICAgaW50IHRpbWVzWzJdOyBtZW1zZXQodGltZXMsIDAsIHNpemVvZiB0aW1lcyk7CiAgICB2ZWN0b3I8aW50PiBuZXdWZWN0b3JbMl07CiAgICB2ZWN0b3I8aW50PiByZXN1bHRWZWN0b3I7CgogICAgZm9yKGludCBpID0gMDsgaSA8IHBpdm90OyBpKyspIG5ld1ZlY3RvclswXS5wdXNoX2JhY2soYXJyW2ldKTsKICAgIGZvcihpbnQgaSA9IHBpdm90OyBpIDwgbGVuZ3RoOyBpKyspIG5ld1ZlY3RvclsxXS5wdXNoX2JhY2soYXJyW2ldKTsKCiAgICBuZXdWZWN0b3JbMF0gPSBzbG93X21lcmdlX3NvcnQobmV3VmVjdG9yWzBdLCBuZXdWZWN0b3JbMF0uc2l6ZSgpKTsKICAgIG5ld1ZlY3RvclsxXSA9IHNsb3dfbWVyZ2Vfc29ydChuZXdWZWN0b3JbMV0sIG5ld1ZlY3RvclsxXS5zaXplKCkpOwoKICAgIHdoaWxlKHJlc3VsdFZlY3Rvci5zaXplKCkgPCBsZW5ndGgpewogICAgICAgIGludCBjdXJfaW5kZXggPSAwOwogICAgICAgIGludCBjdXJfdmFsdWUgPSAoaW50KSAtMWU5OwoKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMjsgaSsrKXsKICAgICAgICAgICAgaWYodGltZXNbaV0gPj0gbmV3VmVjdG9yW2ldLnNpemUoKSkgY29udGludWU7CgogICAgICAgICAgICBpZihjdXJfdmFsdWUgPD0gbmV3VmVjdG9yW2ldW3RpbWVzW2ldXSl7CiAgICAgICAgICAgICAgICBjdXJfdmFsdWUgPSBuZXdWZWN0b3JbaV1bdGltZXNbaV1dOwogICAgICAgICAgICAgICAgY3VyX2luZGV4ID0gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmVzdWx0VmVjdG9yLnB1c2hfYmFjayhjdXJfdmFsdWUpOwogICAgICAgIHRpbWVzW2N1cl9pbmRleF0rKzsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0VmVjdG9yOwp9Cgpib29sIGlzU29ydGVkKCl7CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBpZihhcnJbaSAtIDFdIDwgYXJyW2ldKSByZXR1cm4gMDsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBjaW4gPj4gbjsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGludCB2YWx1ZTsgY2luID4+IHZhbHVlOwogICAgICAgIGFyci5wdXNoX2JhY2sodmFsdWUpOwogICAgfQoKICAgIHdoaWxlKCFpc1NvcnRlZCgpKXsKICAgICAgICBhcnIgPSBzbG93X21lcmdlX3NvcnQoYXJyLCBuKTsKICAgIH0KCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBjb3V0IDw8IGFycltpXSA8PCAnICc7CgogICAgcmV0dXJuIDA7Cn0K