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)
}