Mike is the president of country What-The-Fatherland. There are *n* bears living in this country besides Mike. All of them are standing in a line and they are numbered from 1 to *n* from left to right. *i*-th bear is exactly *a*<sub class="lower-index">*i*</sub> feet high. 

A group of bears is a non-empty contiguous segment of the line. The size of a group is the number of bears in that group. The strength of a group is the minimum height of the bear in that group.

Mike is a curious to know for each *x* such that 1 ≤ *x* ≤ *n* the maximum strength among all groups of size *x*.
The first line of input contains integer *n* (1 ≤ *n* ≤ 2 × 10<sup class="upper-index">5</sup>), the number of bears.

The second line contains *n* integers separated by space, *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ..., *a*<sub class="lower-index">*n*</sub> (1 ≤ *a*<sub class="lower-index">*i*</sub> ≤ 10<sup class="upper-index">9</sup>), heights of bears.
from collections import *

num = int(input())
bears = list(map(int, input().split()))

# this is O(n)
def sliding_window_minimum(nums, k):
    q = deque()
    max_min = -float("inf")
    for i, cur in enumerate(nums):
        while q and nums[q[-1]] >= cur:
            q.pop()
        q.append(i)
        if q[0] == i - k:
            q.popleft()
        if i >= k - 1:
            val = nums[q[0]]
            max_min = max(max_min, val)
    return max_min

# use monotonnic stack to keep track the min in each sliding window (size)
results = []
for x in range(1, num+1):
    val = sliding_window_minimum(bears, x)
    results.append(val)

for i, val in enumerate(results):
    print(val, end="")
    if i != len(results) - 1:
        print(end=" ")

