//
// main.cpp
// sort-batog
//
// Created by Catalina Brinza on 11/21/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <vector>
#include <math.h>
#include <cstdint>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int main()
{vector <int> a;
int n,i,x,k,min,j,l,m=0;
vector <int> s;
vector <int> v;
f>>n;
k=sqrt(n);
int ultim=n/k;
if (n%k!=0) ++ultim;
m=n;
for (i=0;i<ultim;++i)
{
for (j=0;j<k;++j)
{
f>>x;
a.push_back(x);m--;
if (j==0) s.push_back(x);
else if (a[n-m-1]<s[i]) s[i]=a[n-m-1];
if (m==0) break;
}
if (m==0) break;
}
while (v.size()!=n)
{
int minnou=INT_MAX;min=INT_MAX; j=0;
bool ok2=false;
for (i=0;i<ultim;i++)
if (s[i]<min && s[i]!=-1) {min=s[i]; j=i;ok2=true;}
if (ok2) v.push_back(min);
else break;
bool ok=false;ok2=false;
if (j!=ultim-1)
{for (l=j*k;l<(j+1)*k;++l)
if (a[l]==min && !ok) {a[l]=-1;ok=true;}
else if (a[l]<minnou && a[l]!=-1) {minnou=a[l]; ok2=true;}}
else for (l=j*k;l<n;++l)
{ if (a[l]==min && !ok) {a[l]=-1;ok=true;}
else if (a[l]<minnou && a[l]!=-1) {minnou=a[l]; ok2=true;}
}
if (!ok2) s[j]=-1;
else s[j]=minnou;
}
for (i=0;i<n;++i)
g<<v[i]<<' ';
return 0;
}