#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void mergesort(vector<int>& nums, int left, int mid, int right)
{
int n = right - left + 1;
vector<int> result(n);
int i = left;
int j = mid + 1;
int index = 0;
while (i <= mid && j <= right)
{
if (nums[i] < nums[j])
{
result[index++] = nums[i++];
}
else
{
result[index++] = nums[j++];
}
}
while (i <= mid)
{
result[index++] = nums[i++];
}
while (j <= right)
{
result[index++] = nums[j++];
}
for (int i = 0; i < n; i++)
{
nums[left++] = result[i];
}
}
void merge1(vector<int>& nums, int left, int right)
{
if (left < right)
{
int mid = (left + right) / 2;
merge1(nums, left, mid);
merge1(nums, mid + 1, right);
mergesort(nums, left, mid, right);
}
}
void merge(vector<int>& nums)
{
int n = nums.size();
merge1(nums, 0, n - 1);
}
int main()
{
int n;
cin >> n;
vector<int> nums;
while (n--)
{
int temp;
cin >> temp;
nums.push_back(temp);
}
merge(nums);
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i] << " ";
}
system("pause");
return 0;
}