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.
class Stack:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def push(self,item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def top(self):
        return self.items[len(self.items)-1]
    def size(self):
        return len(self.items)
    def empty(self):
        if  not self.items:
            return True
        else:
            return False




MAX = 200005
a = [0]*MAX
l = [0]*MAX
r = [0]*MAX
res = [0]*MAX

def Max(a,b):
    if a > b:
        return a
    else:
        return b
    
N = int(input())
#### zapolnenie massiva a;
a = input().split(" ")
for i in range(len(a)):
    a[i] = int(a[i])
print(a)
for i in range(N+1):
    l[i], r[i] = 0, 0
s = Stack()
st = Stack()
## largest j a[j] < a[i] = l[i]
for i in range(N):
    while((not s.empty()) and (a[s.top()] >= a[i])):
        s.pop()
    if s.empty():
        l[i] = -1
    else:
        l[i] = s.top()
    s.push(i)
    
## smallest j a[j]<a[i] =  r[i]
for i in range(N-1, -1, -1):
    while(not st.empty() and a[st.top()] >= a[i]):
        st.pop()
    if st.empty():
        r[i] = N
    else:
        r[i] = st.top()
    st.push(i)
    
for j in range(N):
    res[r[j] - l[j] - 1] = Max(res[r[j] - l[j] - 1], a[j])
for j in range(N-1, -1, -1):
    res[j] = Max(res[j], res[j+1])
string1 = ""
for i in range(1,N+1,1):
    string1 +=(str(res[i])+" ")
    
print(string1)