← Home
package main

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

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)

	for ; t > 0; t-- {
		var n int
		fmt.Fscan(in, &n)

		p := make([]int, n+1)
		inv := make([]int, n+1)
		for i := 1; i <= n; i++ {
			fmt.Fscan(in, &p[i])
			inv[p[i]] = i
		}

		cycleID := make([]int, n+1)
		vis := make([]bool, n+1)
		cycles := 0
		for i := 1; i <= n; i++ {
			if vis[i] {
				continue
			}
			cycles++
			cur := i
			for !vis[cur] {
				vis[cur] = true
				cycleID[cur] = cycles
				cur = p[cur]
			}
		}

		cnt := make([]int, cycles+1)
		have := 0
		l := 1
		bestL, bestR := 1, n
		for r := 1; r <= n; r++ {
			c := cycleID[r]
			if cnt[c] == 0 {
				have++
			}
			cnt[c]++
			for have == cycles {
				if r-l < bestR-bestL {
					bestL, bestR = l, r
				}
				c2 := cycleID[l]
				cnt[c2]--
				if cnt[c2] == 0 {
					have--
				}
				l++
			}
		}

		rep := make([]int, cycles+1)
		reps := make([]int, 0, cycles)
		for x := bestL; x <= bestR; x++ {
			c := cycleID[x]
			if rep[c] == 0 {
				rep[c] = x
				reps = append(reps, x)
			}
		}

		ans := make([]int, 0, n)
		for _, y := range reps {
			cur := inv[y]
			for {
				ans = append(ans, cur)
				if cur == y {
					break
				}
				cur = inv[cur]
			}
		}

		for i, v := range ans {
			if i > 0 {
				fmt.Fprint(out, " ")
			}
			fmt.Fprint(out, v)
		}
		fmt.Fprintln(out)
	}
}