#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],tt=0;//tt为0开始,则a[i]从1开始储存
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
while(tt&&a[tt]>=a[i])tt--;//当新来的a[i]<=单调栈中的a[tt]即栈顶元素时,则后续的元素
//可以忽略a[tt]的存在,因为a[i]下标比tt靠近后面且等于甚至更小,则出栈循环
if(tt)printf("%d ",a[tt]);
else printf("-1 ");
a[++tt]=a[i];//此题仅在一个a[N]数组中模拟栈,没有读入一个数组a[N],用b[N]充当栈,其实
//用两个数组也不会出错
}
return 0;
}