#include <bits/stdc++.h>
using namespace std;
long long int oddinput[4000007];
long long int oddsegTree[4000007];
long long int eveninput[4000007];
long long int evensegTree[4000007];
void constructTree(long long int *segTree, long long int *input,
                   long long int l, long long int r, long long int pos) {
  if (l == r) {
    segTree[pos] = input[l];
    return;
  }
  long long int mid = (l + r) / 2;
  constructTree(segTree, input, l, mid, pos * 2);
  constructTree(segTree, input, mid + 1, r, pos * 2 + 1);
  segTree[pos] = max(segTree[pos * 2], segTree[pos * 2 + 1]);
}
void Update(long long int *segTree, long long int l, long long int r,
            long long int pos, long long int val, long long int valpos) {
  if (valpos < l || valpos > r) return;
  if (l == r) {
    segTree[pos] = val;
    return;
  }
  long long int mid = (l + r) / 2;
  Update(segTree, l, mid, pos * 2, val, valpos);
  Update(segTree, mid + 1, r, pos * 2 + 1, val, valpos);
  segTree[pos] = max(segTree[pos * 2], segTree[pos * 2 + 1]);
}
long long int query(long long int *segTree, long long int ql, long long int qr,
                    long long int l, long long int r, long long int pos) {
  if (l > qr || r < ql) return 0;
  if (l >= ql && r <= qr) return segTree[pos];
  long long int mid = (l + r) / 2;
  return max(query(segTree, ql, qr, l, mid, pos * 2),
             query(segTree, ql, qr, mid + 1, r, pos * 2 + 1));
}
int main() {
  ios_base::sync_with_stdio(false);
  long long int n;
  cin >> n;
  long long int a[n + 5];
  for (int i = 1; i <= n; i++) cin >> a[i];
  if (n == 1) {
    cout << a[1] << " \n";
    return 0;
  }
  for (int i = 1; i <= n - 1; i++) eveninput[i] = max(a[i], a[i + 1]);
  constructTree(evensegTree, eveninput, 1, n - 1, 1);
  for (int i = 1; i <= n - 2; i++)
    oddinput[i] = min(a[i + 1], max(a[i], a[i + 2]));
  constructTree(oddsegTree, oddinput, 1, n - 2, 1);
  long long int ans[n + 5];
  ans[n - 1] = a[1];
  for (int i = 1; i <= n; i++) ans[n - 1] = max(ans[n - 1], a[i]);
  for (int i = 0; i < n - 1; i++) {
    if ((n - i) % 2 == 0) {
      long long int l = (n - i) / 2;
      long long int r = l + i;
      ans[i] = query(evensegTree, l, r, 1, n - 1, 1);
    } else {
      long long int l = (n - i) / 2;
      long long int r = l + i;
      ans[i] = query(oddsegTree, l, r, 1, n - 2, 1);
    }
  }
  for (int i = 0; i < n; i++) cout << ans[i] << " ";
  cout << endl;
  return 0;
}
