← Home
package main

import (
	"io"
	"os"
	"strconv"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c >= '0' && c <= '9' {
			break
		}
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int(c-'0')
		fs.idx++
	}
	return val
}

func main() {
	fs := NewFastScanner()
	t := fs.NextInt()
	out := make([]byte, 0, 1<<20)

	for ; t > 0; t-- {
		n := fs.NextInt()
		a := make([]int, n)
		for i := 0; i < n; i++ {
			a[i] = fs.NextInt()
		}

		sufMin := make([]int, n)
		sufMin[n-1] = a[n-1]
		for i := n - 2; i >= 0; i-- {
			if a[i] < sufMin[i+1] {
				sufMin[i] = a[i]
			} else {
				sufMin[i] = sufMin[i+1]
			}
		}

		ans := make([]int, n)
		start := 0
		curMax := a[0]

		for i := 0; i < n-1; i++ {
			if a[i] > curMax {
				curMax = a[i]
			}
			if curMax <= sufMin[i+1] {
				for j := start; j <= i; j++ {
					ans[j] = curMax
				}
				start = i + 1
				curMax = a[start]
			}
		}

		if a[n-1] > curMax {
			curMax = a[n-1]
		}
		for j := start; j < n; j++ {
			ans[j] = curMax
		}

		for i := 0; i < n; i++ {
			out = strconv.AppendInt(out, int64(ans[i]), 10)
			if i+1 < n {
				out = append(out, ' ')
			} else {
				out = append(out, '\n')
			}
		}
	}

	os.Stdout.Write(out)
}