#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int A_count[1000001] = { 0, };//지역으로 큰 크기의 배열을 선언하면 런타임에러 발생,
//전역에서 배열 0으로 초기화
int main()
{
int n;
cin >> n;
vector<int> A(n); //vector<int> A; 로 선언하면 오류 발생
vector<int> NGF(n);
stack<int> s;
for (int i = 0; i < n; i++) //A입력
{
cin >> A[i];
}
for (int i = 0; i < n; i++) //A[1] == 3, A[2] == 2, A[3] == 1, A[4] == 1
{
A_count[A[i]]++;
}
for (int i = 0; i < n; i++)
{
while (!s.empty() && A_count[A[s.top()]] < A_count[A[i]]) //stack 이 비어있지 않고
//다음 수의 개수가 이전 수의 개수보다 많으면
{
NGF[s.top()] = A[i];// NGF에 대입
s.pop();
}
s.push(i);
}
while (!s.empty())
{
NGF[s.top()] = -1; //NGF 비어있는곳은 -1 대입
s.pop();
}
for (int i = 0; i < n; i++)
{
cout << NGF[i] << ' ';
}
cout << '\n';
}