/*
#include<stdio.h>
int n;
struct rerange
{
int score, rank;
};
struct rerange x[100000] = {0};
void qs(int s,int e)
{
int pivot=s;
int left=s,right=e+1;
int i;
if(s>=e) return;
do
{
do
{
left++;
}
while(x[pivot].score>x[left].score);
do
{
right--;
}
while(x[pivot].score<x[right].score);
if(left<right)
{
struct rerange v = x[left];
x[left] = x[right];
x[right] = v;
}
} while(left<right);
struct rerange v=x[right];
x[right]=x[pivot];
x[pivot]=v;
qs(s,right-1);
qs(right+1,e);
}
int main()
{
int i;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&x[i].score);
x[i].rank=i;
}
qs(1,n);
for(i=1; i<=n; i++)
{
x[i].score=x[i].rank;
x[i].rank=i-1;
}
qs(1,n);
for(i=1; i<=n; i++)
{
printf("%d ",x[i].rank);
}
return 0;
}
*/
/*
#include<stdio.h>
int a[4500001]= {};
void qs(int s,int e)
{
int pivot=s;
int left=s,right=e+1;
if(s>=e) return;
do
{
do
{
left++;
}while(a[left]<a[pivot]);
do
{
right--;
}while(a[right]>a[pivot]);
if(left<right)
{
int temp=a[left];
a[left]=a[right];
a[right]=temp;
}
}while(left<right);
int temp=a[pivot];
a[pivot]=a[right];
a[right]=temp;
qs(s,right-1);
qs(right+1,e);
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
qs(1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
*/
#include<stdio.h>
int a[4500001]= {};
void qs(int s,int e)
{
int pivot=s;
int left=s,right=e+1;
if(s>=e) return;
do
{
do
{
left++;
}while(a[left]<a[pivot]);
do
{
right--;
}while(a[right]>a[pivot]);
if(left<right)
{
int temp=a[left];
a[left]=a[right];
a[right]=temp;
}
}while(left<right);
int temp=a[pivot];
a[pivot]=a[right];
a[right]=temp;
qs(s,right-1);
qs(right+1,e);
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
qs(1,n);
}