#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
****************************************************************/