#include<vector>
#include <iostream>
#include<cassert>
#include<fstream>
//#include<bits/stdc++.h>
using namespace std;
vector<int> interclasare( const vector<int> &v1, const vector<int> &v2)
{
int ind1=0, ind2=0;
vector<int> ans;
while(ind1<(int)v1.size() && ind2<(int)v2.size())
{
if(v1[ind1]<v2[ind2])
{ ans.push_back(v1[ind1]);
ind1++;
}
else{
ans.push_back(v2[ind2]);
ind2++;
}
}
while(ind1<(int)v1.size())
{
ans.push_back(v1[ind1]);
ind1++;
}
while(ind2<(int)v2.size())
{
ans.push_back(v2[ind2]);
ind2++;
}
return ans;
}
vector<int> mergesort( int l, int r, const vector<int> &v)
{
if(l>r)
return vector<int> ();
if(l==r)
return vector<int>({v[l]});
auto one=mergesort(l,(l+r)/2, v);
auto two=mergesort((l+r)/2+1, r, v);
return interclasare(one, two);
}
int main() {
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int N;
vector<int> v;
fin>>N;
for(int i=1; i<=N; i++)
{
int x;
fin>>x;
v.push_back(x);
}
auto ans=mergesort(0, N-1, v);
for(auto &x: ans)
fout<<x<<" ";
/* auto v1={7, 12, 21, 30, 45};
auto v2={1, 2, 6, 9, 14, 27, 33, 49, 55};
assert((interclasare(v1, v2)== vector<int>({1, 2, 6, 7, 9, 12, 14, 21, 27, 30, 33, 45, 49, 55})));*/
return 0;
}
//for(int i=v1.size()-1; i>=0; i--)