#include <stdio.h>
struct coke
{
int g;
int cnt;
int ou;
};
struct coke array[50001];
int s,e,i,j,n;
void swap(int a,int b)
{
int temp;
temp=array[a].g;
array[a].g=array[b].g;
array[b].g=temp;
temp=array[a].cnt;
array[a].cnt=array[b].cnt;
array[b].cnt=temp;
temp=array[a].ou;
array[a].ou=array[b].ou;
array[b].ou=temp;
}
int parti(int start,int end)
{
s=start+1;
e=end;
while (s<=e)
{
while (array[start].g>=array[s].g)
{
s++;
}
while (array[start].g<array[e].g)
{
e--;
}
if (s<e)
{
swap(s,e);
}
else
{
break;
}
}
swap(start,e);
return e;
}
int parti1(int start1,int end1)
{
s=start1+1;
e=end1;
while (s<=e)
{
while (array[start1].cnt>=array[s].cnt)
{
s++;
}
while (array[start1].cnt<array[e].cnt)
{
e--;
}
if (s<e)
{
swap(s,e);
}
else
{
break;
}
}
swap(start1,e);
return e;
}
void quick(int d,int f)
{
int k;
if (d<f)
{
k=parti(d,f);
quick(d,k-1);
quick(k+1,f);
}
}
void quick1(int d,int f)
{
int k;
if (d<f)
{
k=parti1(d,f);
quick1(d,k-1);
quick1(k+1,f);
}
}
void insert()
{
for (i=0; i<n; i++)
{
array[i].ou=i;
}
}
int main()
{
scanf("%d",&n);
for (i=0; i<n; i++)
{
scanf("%d",&array[i].g);
array[i].cnt=i;
}
quick(0,n-1);
insert();
quick1(0,n-1);
for (i=0; i<n; i++)
{
printf("%d ",array[i].ou);
}
}