#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pa pair<int, int>
#define tup tuple<int, int, int>
#define db double
#define fi first
#define se second
#define ull unsigned long long
const int maxn = 2e5 + 4, INF = 1e17 + 4, lg = 17, base = 31, mod = 1e9 + 7;
map <int , int> mp;
int a[maxn] , lazy[4 * maxn] , st[4 * maxn];
int n;
void nhap()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1 ; i <= n ; i ++)
cin >> a[i];
}
void fix(int id , int l , int r)
{
if (!lazy[id])
return;
st[id] = lazy[id];
if (l != r)
lazy[2 * id] = lazy[2 * id + 1] = lazy[id];
lazy[id] = 0;
}
void update(int id , int l , int r , int u , int v , int val)
{
fix(id , l , r);
if (v < l || r < u)
return;
if (u <= l && r <= v)
{
lazy[id] = val;
fix(id , l , r);
return;
}
int mid = (l + r) / 2;
update(2 * id , l , mid , u , v , val);
update(2 * id + 1 , mid + 1 , r , u , v , val);
}
int get(int id , int l , int r , int pos)
{
fix(id , l , r);
if (l == r)
return st[id];
int mid = (l + r) / 2;
if (pos <= mid)
return get(2 * id , l , mid , pos);
else
return get(2 * id + 1 , mid + 1 , r , pos);
}
void Solve()
{
for (int i = 1 ; i <= n ; i ++)
{
if (mp[a[i]] && get(1 , 1 , n , mp[a[i]]) == a[i])
update(1 , 1 , n , mp[a[i]] , i , a[i]);
else
update(1 , 1 , n , i , i , a[i]);
mp[a[i]] = i;
}
for (int i = 1 ; i <= n ; i ++)
cout << get(1 , 1 , n , i) << '\n';
}
signed main()
{
nhap();
Solve();
}