← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	for i := 0; i < t; i++ {
		var n int
		fmt.Fscan(reader, &n)
		
		p := make([]int, n+1)
		pInv := make([]int, n+1)
		for j := 1; j <= n; j++ {
			fmt.Fscan(reader, &p[j])
			pInv[p[j]] = j
		}

		parent := make([]int, n+1)
		for j := 1; j <= n; j++ {
			parent[j] = j
		}

		var find func(int) int
		find = func(x int) int {
			if parent[x] != x {
				parent[x] = find(parent[x])
			}
			return parent[x]
		}

		union := func(x, y int) bool {
			rootX := find(x)
			rootY := find(y)
			if rootX != rootY {
				parent[rootX] = rootY
				return true
			}
			return false
		}

		for j := 1; j <= n; j++ {
			union(j, p[j])
		}

		T := make([]int, n+1)
		for j := 1; j <= n; j++ {
			T[j] = j
		}

		for j := 1; j < n; j++ {
			if find(j) != find(j+1) {
				union(j, j+1)
				T[j], T[j+1] = T[j+1], T[j]
			}
		}

		succ := make([]int, n+1)
		for j := 1; j <= n; j++ {
			succ[j] = pInv[T[j]]
		}

		curr := 1
		for j := 1; j <= n; j++ {
			if j > 1 {
				fmt.Fprint(writer, " ")
			}
			fmt.Fprint(writer, curr)
			curr = succ[curr]
		}
		fmt.Fprintln(writer)
	}
}