#include<bits/stdc++.h>
using namespace std;
vector<int> a;
struct Node{
int set, sum, L, R;
void push(Node& left, Node& right){
int mid = (L + R)/2;
if(set != 0){
left.set = set;
right.set = set;
left.sum = set * (mid - L + 1);
right.sum = set * (R - mid);
set = 0;
}
}
void merge(Node& left, Node& right){
sum = left.sum + right.sum;
}
};
vector<Node> segtree;
void build(int idx, int L, int R){
if(L == R){
segtree[idx].sum = a[L];
segtree[idx].L = L;
segtree[idx].R = R;
segtree[idx].set = 0;
return;
}
int mid = (L + R)/2;
segtree[idx].set = 0;
build(2 * idx, L, mid);
build(2 * idx + 1, mid + 1, R);
segtree[idx].L = segtree[2 * idx].L;
segtree[idx].R = segtree[2 * idx + 1].R;
segtree[idx].merge(segtree[2 * idx], segtree[2 * idx + 1]);
}
int query(int idx, int L, int R, int qL, int qR, int val, int type){
if(qR < L || R < qL){
return 0;
}
if(qL <= L && R <= qR){
if(type == 0){
return segtree[idx].sum;
}
else{
segtree[idx].set = val;
segtree[idx].sum = val * (R - L + 1);
}
}
int mid = (L + R)/2;
segtree[idx].push(segtree[2 * idx], segtree[2 * idx + 1]);
int left = query(2 * idx, L, mid, qL, qR, val, type);
int right = query(2 * idx + 1, mid + 1, R, qL, qR, val, type);
if(type == 0){
return left + right;
}
else{
segtree[idx].merge(segtree[2 * idx], segtree[2 * idx + 1]);
return 0;
}
}
int main(){
int n;
cin >> n;
a.resize(1 + n);
// segtree.resize(4 + 4 * n);
for(int i = 1; i <= n; i++){
cin >> a[i];
}
// build(1, 1, n);
for(int i = 1; i <= n; i++){
int idx = -1;
for(int j = i - 1; j >= 0; j--){
if(a[i] == a[j]){
idx = j;
break;
}
}
if(idx != -1){
for(int k = i - 1; k > idx; k--){
a[k] = a[i];
}
}
}
for(int i = 1; i <= n; i++){
cout << a[i] << "\n";
// cout << query(1, 1, n, i, i, 0, 0) << "\n";
}
}