#include<bits/stdc++.h>
using namespace std;
void Merge(vector <int>& nums, int left, int mid, int right)
{
vector <int> leftPart, rightPart;
for(int i=left;i<=right;i++)
{
if(i<=mid)
{
leftPart.push_back(nums[i]);
}
else
{
rightPart.push_back(nums[i]);
}
}
int leftIdx = 0, rightIdx = 0, numsIdx = left;
while(1)
{
if(leftPart[leftIdx] < rightPart[rightIdx])
{
nums[numsIdx] = leftPart[leftIdx];
numsIdx++;
leftIdx++;
}
else
{
nums[numsIdx] = rightPart[rightIdx];
numsIdx++;
rightIdx++;
}
if(leftIdx >= leftPart.size() || rightIdx >= rightPart.size())
break;
}
while(leftIdx < leftPart.size())
{
nums[numsIdx] = leftPart[leftIdx];
numsIdx++;
leftIdx++;
}
while(rightIdx < rightPart.size())
{
nums[numsIdx] = rightPart[rightIdx];
numsIdx++;
rightIdx++;
}
}
void MergeSort(vector <int>& nums, int left, int right)
{
if(left == right)
{
return;
}
int mid = (left+right)/2;
MergeSort(nums,left,mid);
MergeSort(nums,mid+1,right);
Merge(nums,left,mid,right);
}
int main()
{
int n;
cin>>n;
vector <int> nums;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
nums.push_back(x);
}
MergeSort(nums,0,n-1);
for(int i=0;i<n;i++)
{
cout<<nums[i]<<" ";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIE1lcmdlKHZlY3RvciA8aW50PiYgbnVtcywgaW50IGxlZnQsIGludCBtaWQsIGludCByaWdodCkKewogICAgdmVjdG9yIDxpbnQ+IGxlZnRQYXJ0LCByaWdodFBhcnQ7CiAgICBmb3IoaW50IGk9bGVmdDtpPD1yaWdodDtpKyspCiAgICB7CiAgICAgICAgaWYoaTw9bWlkKQogICAgICAgIHsKICAgICAgICAgICAgbGVmdFBhcnQucHVzaF9iYWNrKG51bXNbaV0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICByaWdodFBhcnQucHVzaF9iYWNrKG51bXNbaV0pOwogICAgICAgIH0KICAgIH0KICAgIGludCBsZWZ0SWR4ID0gMCwgcmlnaHRJZHggPSAwLCBudW1zSWR4ID0gbGVmdDsKICAgIHdoaWxlKDEpCiAgICB7CiAgICAgICAgaWYobGVmdFBhcnRbbGVmdElkeF0gPCByaWdodFBhcnRbcmlnaHRJZHhdKQogICAgICAgIHsKICAgICAgICAgICAgbnVtc1tudW1zSWR4XSA9IGxlZnRQYXJ0W2xlZnRJZHhdOwogICAgICAgICAgICBudW1zSWR4Kys7CiAgICAgICAgICAgIGxlZnRJZHgrKzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbnVtc1tudW1zSWR4XSA9IHJpZ2h0UGFydFtyaWdodElkeF07CiAgICAgICAgICAgIG51bXNJZHgrKzsKICAgICAgICAgICAgcmlnaHRJZHgrKzsKICAgICAgICB9CiAgICAgICAgaWYobGVmdElkeCA+PSBsZWZ0UGFydC5zaXplKCkgfHwgcmlnaHRJZHggPj0gcmlnaHRQYXJ0LnNpemUoKSkKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICB3aGlsZShsZWZ0SWR4IDwgbGVmdFBhcnQuc2l6ZSgpKQogICAgewogICAgICAgIG51bXNbbnVtc0lkeF0gPSBsZWZ0UGFydFtsZWZ0SWR4XTsKICAgICAgICBudW1zSWR4Kys7CiAgICAgICAgbGVmdElkeCsrOwogICAgfQogICAgd2hpbGUocmlnaHRJZHggPCByaWdodFBhcnQuc2l6ZSgpKQogICAgewogICAgICAgIG51bXNbbnVtc0lkeF0gPSByaWdodFBhcnRbcmlnaHRJZHhdOwogICAgICAgIG51bXNJZHgrKzsKICAgICAgICByaWdodElkeCsrOwogICAgfQp9Cgp2b2lkIE1lcmdlU29ydCh2ZWN0b3IgPGludD4mIG51bXMsIGludCBsZWZ0LCBpbnQgcmlnaHQpCnsKICAgIGlmKGxlZnQgPT0gcmlnaHQpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZCA9IChsZWZ0K3JpZ2h0KS8yOwogICAgTWVyZ2VTb3J0KG51bXMsbGVmdCxtaWQpOwogICAgTWVyZ2VTb3J0KG51bXMsbWlkKzEscmlnaHQpOwogICAgTWVyZ2UobnVtcyxsZWZ0LG1pZCxyaWdodCk7Cn0KCmludCBtYWluKCkKewogICAgaW50IG47CiAgICBjaW4+Pm47CiAgICB2ZWN0b3IgPGludD4gbnVtczsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB7CiAgICAgICAgaW50IHg7CiAgICAgICAgY2luPj54OwogICAgICAgIG51bXMucHVzaF9iYWNrKHgpOwogICAgfQogICAgTWVyZ2VTb3J0KG51bXMsMCxuLTEpOwogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgIHsKICAgICAgICBjb3V0PDxudW1zW2ldPDwiICI7CiAgICB9Cn0=