← Home
package main

import (
	"io"
	"os"
)

func nextInt(data []byte, idx *int) int {
	n := len(data)
	i := *idx
	for i < n && (data[i] < '0' || data[i] > '9') {
		i++
	}
	val := 0
	for i < n && data[i] >= '0' && data[i] <= '9' {
		val = val*10 + int(data[i]-'0')
		i++
	}
	*idx = i
	return val
}

func appendInt(dst []byte, x int) []byte {
	if x == 0 {
		return append(dst, '0')
	}
	var buf [20]byte
	i := len(buf)
	for x > 0 {
		i--
		buf[i] = byte('0' + x%10)
		x /= 10
	}
	return append(dst, buf[i:]...)
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	t := nextInt(data, &idx)
	ns := make([]int, t)
	maxN := 0
	for i := 0; i < t; i++ {
		n := nextInt(data, &idx)
		ns[i] = n
		if n > maxN {
			maxN = n
		}
	}

	lpf := make([]int, maxN+1)
	for i := 2; i <= maxN; i++ {
		if lpf[i] == 0 {
			for j := i; j <= maxN; j += i {
				lpf[j] = i
			}
		}
	}

	out := make([]byte, 0, 1<<20)

	for _, n := range ns {
		ans := make([]int, n+1)
		buckets := make([][]int, n+1)

		for i := 1; i <= n; i++ {
			ans[i] = i
		}

		for i := 2; i <= n; i++ {
			p := lpf[i]
			buckets[p] = append(buckets[p], i)
		}

		for p := 2; p <= n; p++ {
			g := buckets[p]
			k := len(g)
			if k > 1 {
				for i, v := range g {
					if i+1 < k {
						ans[v] = g[i+1]
					} else {
						ans[v] = g[0]
					}
				}
			}
		}

		for i := 1; i <= n; i++ {
			if i > 1 {
				out = append(out, ' ')
			}
			out = appendInt(out, ans[i])
		}
		out = append(out, '\n')
	}

	os.Stdout.Write(out)
}