#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())
{
numsidx=leftpart[leftidx];
numsidx++;
leftidx++;
}
while(rightidx<rightpart.size())
{
numsidx=rightpart[rightidx];
numsidx++;
rightidx++;
}
}
void MergeSort(vector<int>&nums,int left,int right)
{
if(left==right)
{
return;
}
int mid=(right+left)/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]<<" ";
}
}
ICNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgTWVyZ2UodmVjdG9yPGludD4mbnVtcyxpbnQgbGVmdCxpbnQgbWlkLGludCByaWdodCkKewp2ZWN0b3I8aW50PmxlZnRwYXJ0LHJpZ2h0cGFydDsKZm9yKGludCBpPWxlZnQ7aTw9cmlnaHQ7aSsrKQp7CmlmKGk8PW1pZCkKewpsZWZ0cGFydC5wdXNoX2JhY2sobnVtc1tpXSk7Cn0KZWxzZQp7CnJpZ2h0cGFydC5wdXNoX2JhY2sobnVtc1tpXSk7Cn0KfQppbnQgbGVmdGlkeD0wLHJpZ2h0aWR4PTAsbnVtc2lkeD1sZWZ0Owp3aGlsZSgxKQp7CmlmKGxlZnRwYXJ0W2xlZnRpZHhdPHJpZ2h0cGFydFtyaWdodGlkeF0pCnsKbnVtc1tudW1zaWR4XT1sZWZ0cGFydFtsZWZ0aWR4XTsKbnVtc2lkeCsrOwpsZWZ0aWR4Kys7Cn0KZWxzZQp7Cm51bXNbbnVtc2lkeF09cmlnaHRwYXJ0W3JpZ2h0aWR4XTsKbnVtc2lkeCsrOwpyaWdodGlkeCsrOwp9CmlmKGxlZnRpZHg+PWxlZnRwYXJ0LnNpemUoKSB8fCByaWdodGlkeD49cmlnaHRwYXJ0LnNpemUoKSkKYnJlYWs7Cn0Kd2hpbGUobGVmdGlkeDxsZWZ0cGFydC5zaXplKCkpCnsKbnVtc2lkeD1sZWZ0cGFydFtsZWZ0aWR4XTsKbnVtc2lkeCsrOwpsZWZ0aWR4Kys7Cn0Kd2hpbGUocmlnaHRpZHg8cmlnaHRwYXJ0LnNpemUoKSkKewpudW1zaWR4PXJpZ2h0cGFydFtyaWdodGlkeF07Cm51bXNpZHgrKzsKcmlnaHRpZHgrKzsKfQp9CnZvaWQgTWVyZ2VTb3J0KHZlY3RvcjxpbnQ+Jm51bXMsaW50IGxlZnQsaW50IHJpZ2h0KQp7CmlmKGxlZnQ9PXJpZ2h0KQp7CnJldHVybjsKfQppbnQgbWlkPShyaWdodCtsZWZ0KS8yOwpNZXJnZVNvcnQobnVtcyxsZWZ0LG1pZCk7Ck1lcmdlU29ydChudW1zLG1pZCsxLHJpZ2h0KTsKTWVyZ2UobnVtcyxsZWZ0LG1pZCxyaWdodCk7Cn0KaW50IG1haW4oKQp7CmludCBuOwpjaW4+Pm47CnZlY3RvcjxpbnQ+bnVtczsKZm9yKGludCBpPTA7aTxuO2krKykKewppbnQgeDsKY2luPj54OwpudW1zLnB1c2hfYmFjayh4KTsKfQpNZXJnZVNvcnQobnVtcywwLG4tMSk7CmZvcihpbnQgaT0wO2k8bjtpKyspCnsKY291dDw8bnVtc1tpXTw8IiAiOwp9Cn0=