#include <bits/stdc++.h>
using namespace std;
struct cmp{
bool operator()(pair<int,int> a,pair<int,int> b) const {
if (a.first!=b.first) return a.first<b.first;
return a.second>b.second;
}
};
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
vector<int> a(n);
for (int i=0;i<n;i++) cin>>a[i];
set<pair<int,int>,cmp> st;
vector<vector<pair<int,int>>> vec(n+1);
vector<int> info(n+1);
stack<pair<int,int>> ins;
int nr=1;
for (int i=0;i<n;i++){
int x=a[i];
auto it=st.lower_bound({x,n+1});
if (it!=st.end() && (*it).first==x){
int ind=(*it).second;
vec[ind].push_back({nr,1});
vec[i+1].push_back({nr,0});
info[nr]=x;
nr++;
while (!ins.empty() && ins.top().second>=ind){
st.erase({ins.top().first,ins.top().second});
ins.pop();
}
}
st.insert({x,i});
ins.push({x,i});
}
vector<int> ans(n);
priority_queue<int> pq;
vector<bool> bad(n+1);
for (int i=0;i<n;i++){
for (auto [f,s]:vec[i]){
if (s==0) bad[f]=true;
else pq.push(f);
}
while (!pq.empty() && bad[pq.top()]) pq.pop();
if (!pq.empty()) ans[i]=info[pq.top()];
else ans[i]=a[i];
}
for (int x:ans) cout<<x<<"\n";
return 0;
}