← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strconv"
	"strings"
)

type Pair struct {
	val, id int
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	readInt := func() int {
		if !scanner.Scan() {
			return 0
		}
		res, _ := strconv.Atoi(scanner.Text())
		return res
	}

	t := readInt()
	var out strings.Builder
	for tc := 0; tc < t; tc++ {
		n := readInt()
		a := make([]int, n)
		pairs := make([]Pair, n)
		for i := 0; i < n; i++ {
			a[i] = readInt()
			pairs[i] = Pair{val: a[i], id: i}
		}

		sort.SliceStable(pairs, func(i, j int) bool {
			return pairs[i].val < pairs[j].val
		})

		b := make([]int, n)
		for i := 0; i < n; i++ {
			b[pairs[i].id] = i + 1
		}

		inv := 0
		for i := 0; i < n; i++ {
			for j := i + 1; j < n; j++ {
				if b[i] > b[j] {
					inv++
				}
			}
		}

		if inv%2 != 0 {
			dupFound := false
			for i := 0; i < n-1; i++ {
				if pairs[i].val == pairs[i+1].val {
					id1, id2 := pairs[i].id, pairs[i+1].id
					b[id1], b[id2] = b[id2], b[id1]
					dupFound = true
					break
				}
			}
			if !dupFound {
				out.WriteString("-1\n")
				continue
			}
		}

		var ops []int
		for v := 1; v <= n-2; v++ {
			p := -1
			for i := 0; i < n; i++ {
				if b[i] == v {
					p = i
					break
				}
			}

			for p > v {
				ops = append(ops, p-1)
				tmp := b[p]
				b[p] = b[p-1]
				b[p-1] = b[p-2]
				b[p-2] = tmp
				p -= 2
			}
			if p == v {
				ops = append(ops, v, v)
				for k := 0; k < 2; k++ {
					tmp := b[v+1]
					b[v+1] = b[v]
					b[v] = b[v-1]
					b[v-1] = tmp
				}
			}
		}

		out.WriteString(strconv.Itoa(len(ops)) + "\n")
		for i, op := range ops {
			if i > 0 {
				out.WriteString(" ")
			}
			out.WriteString(strconv.Itoa(op))
		}
		out.WriteString("\n")
	}
	fmt.Print(out.String())
}