#include<cstdio>
#define kl k<<1
#define kr k<<1|1
const int N=200001;
int d=0;
int v[N],t[N<<2];
int min(int a,int b){if(a<b)return a;return b;}
void build(int L,int R,int k)
{
if(L==R)
scanf("%d",&v[d]),t[k]=v[d++];
else
{
int mid=(L+R)>>1;
build(L,mid,kl);
build(mid+1,R,kr);
t[k]=min(t[kl],t[kr]);
}
}
int query(int L,int R,int x,int k)
{
if(t[k]>=v[x])
return 0;
if(L==R&&t[k]<v[x])
return v[L-1];
int y,mid=(L+R)>>1;
if(x>mid)
{
y=query(mid+1,R,x,kr);
if(y==0)
y=query(L,mid,x,kl);
}
else
y=query(L,mid,x,kl);
return y;
}
int main()
{
int i,n;
scanf("%d",&n);
build(1,n,1);
printf("0");
for(i=1;i<n;i++)
printf(" %d",query(1,n,i,1));
return 0;
}
/**************************************************************
Problem: 2034
User: admin
Language: C++
Result: Accepted
Time:152 ms
Memory:5052 kb
****************************************************************/