Problem: You are given an array a consisting of n integers (it is guaranteed that n is even, i.e. divisible by 2). All a_i does not exceed some integer k.

Your task is to replace the minimum number of elements (replacement is the following operation: choose some index i from 1 to n and replace a_i with some integer in range [1; k]) to satisfy the following conditions:

  * after all replacements, all a_i are positive integers not greater than k; 
  * for all i from 1 to n/2 the following equation is true: a_i + a_{n - i + 1} = x, where x should be the same for all n/2 pairs of elements. 



You have to answer t independent test cases.

Input

The first line of the input contains one integer t (1 ≤ t ≤ 10^4) — the number of test cases. Then t test cases follow.

The first line of the test case contains two integers n and k (2 ≤ n ≤ 2 ⋅ 10^5, 1 ≤ k ≤ 2 ⋅ 10^5) — the length of a and the maximum possible value of some a_i correspondingly. It is guratanteed that n is even (i.e. divisible by 2). The second line of the test case contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ k), where a_i is the i-th element of a.

It is guaranteed that the sum of n (as well as the sum of k) over all test cases does not exceed 2 ⋅ 10^5 (∑ n ≤ 2 ⋅ 10^5, ∑ k ≤ 2 ⋅ 10^5).

Output

For each test case, print the answer — the minimum number of elements you have to replace in a to satisfy the conditions from the problem statement.

Example

Input


4
4 2
1 2 1 2
4 3
1 2 2 1
8 7
6 1 1 7 6 3 4 6
6 6
5 2 6 1 3 4


Output


0
1
4
2

Solution (in JAVA):

Solution:
import java.util.*;
import java.io.*;  

public class Solution{
    public static class pair{
        int x;
        int y;
    }
    public static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
        public String next() {
			while (!st.hasMoreElements())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		public int nextInt() {
			return Integer.parseInt(next());
		}
		public long nextLong() {
			return Long.parseLong(next());
		}
		public int[] readArray(int n) {
			int[] a=new int[n];
			for (int i=0; i<n; i++) {
				a[i]=nextInt();
			}
			return a;
		}public double nextDouble() {
			return Double.parseDouble(next());
		}
    }

    public static void main(String[] args) throws IOException{
        FastScanner fs=new FastScanner();
		int t=fs.nextInt();
		PrintWriter out=new PrintWriter(System.out);
        while(t-->0){
            int n=fs.nextInt();
            int k=fs.nextInt();
            int[] arr=fs.readArray(n);
            HashMap<Long,Integer> map=new HashMap<>();
            int[] ans=new int[2*k];
            for(int i=0;i<n/2;i++){
                int v1=Math.min(arr[i],arr[n-1-i])+1;
                int v2=Math.max(arr[i],arr[n-1-i])+k;
                if(map.containsKey(((long)(arr[i]+arr[n-1-i])))){
                    int v=map.get((long)(arr[i]+arr[n-1-i]));
                    map.put((long)(arr[i]+arr[n-1-i]),v+1);
                }else{
                    map.put((long)(arr[i]+arr[n-1-i]),1);
                }
                ans[v1-2]++;
                ans[v2-1]--;
            }
            for(int i=1;i<ans.length;i++){
                ans[i]=ans[i]+ans[i-1];
            }
            long min=Long.MAX_VALUE;
            for(int i=0;i<ans.length;i++){
                long v=ans[i]+n-(2*ans[i]);
                if(map.containsKey((long)(i+2))){
                    v-=map.get((long)(i+2));
                }
                min=Math.min(min,v);
            }
            // for(long j=2;j<=(2*k);j++){
            //     long sum=0;
            //     for(int i=0;i<n/2;i++){
            //         int x=arr[i];
            //         int y=arr[n-1-i];
            //         long s=j;
            //         long z=x+y;
            //         if(z>s){
            //             int m=Math.max(x,y);
            //             if((m-1)>=(int)(z-s)){
            //                 sum+=1;
            //             }else{
            //                 sum+=2;
            //             }
            //         }else if(z<s){
            //             int m=Math.min(x,y);
            //             if((k-m)>=(int)(s-z)){
            //                 sum+=1;
            //             }else{
            //                 sum+=2;
            //             }
            //         }else{
            //             sum+=0;
            //         }
            //     }
            //     min=Math.min(min,sum);
            // }
            // for(int i=0;i<ans.length;i++){
            //     for(int j=0;j<ans[0].length;j++){
            //         System.out.print(ans[i][j]+" ");
            //     }
            //     System.out.println();
            // }
            // long min=Long.MAX_VALUE;
            // for(int j=0;j<ans[0].length;j++){
            //     long sum=0;
            //     for(int i=0;i<ans.length;i++){
            //         sum+=ans[i][j];
            //     }
            //     min=Math.min(sum,min);
            // }
            System.out.println(min);
        }
        out.close();
    }
    public static void fost(HashMap<Integer,ArrayList<Integer>> map,int n,int n1){
        ArrayList<Integer> s=map.get(n);
        // System.out.println(s);
        for(int i=0;i<s.size();i++){
            if(s.get(i)==n1){
                s.remove(i);
                break;
            }
        }
        // System.out.println(s);
        for(int i=0;i<s.size();i++){
            fost(map,s.get(i),n);
        }
    }
    public static long calc(long n,long b){
        if(b==1){
            return Long.MAX_VALUE;
        }
        long val=(long)Math.ceil(n/b);
        long p=2;
        long ans=val;
        while(val!=0){
            val=(long)Math.ceil((long)n/(long)Math.pow(b,p));
            p++;
            ans+=val;
        }
        return ans;
    }
    public static long quala(long b){
        long val=(long)Math.ceil(Math.pow(1+(8*b),0.5));
        if(val%2==0){
            long va=(long)(2+val)/(long)2;
            return va;
        }else{
            long va=(long)(1+val)/(long)2;
            return va;
        }
    }
    public static String find(int a,int b){
        if(a==3){
            if(b==1){
                return "abb";
            }else if(b==2){
                return "bab";
            }else{
                return "bba";
            }
        }
        int v=((a-1)*(a-2))/2;
        if(b<=v){
            String s=find(a-1,b);
            StringBuffer sb=new StringBuffer(s);
            int diff=a-s.length();
            while(diff-->0){
                sb.insert(0,"a");
            }
            return sb.toString();
        }else{
            int diff=b-v;
            StringBuffer sb=new StringBuffer();
            sb.append("b");
            for(int i=0;i<a-diff-1;i++){
                sb.append("a");
            }
            sb.append("b");
            for(int i=0;i<diff-1;i++){
                sb.append("a");
            }
            return sb.toString();
        }
        // return new String("a"+s);
    }
    public static long z(long val){
        long p=1;
        while(val!=0){
            long rem=val%10;
            p*=rem;
            val=val/10;
        }
        return p;
    }
    public static int[] soe(int n){
        int[] arr=new int[n];
        arr[0]=0;
        for(int i=1;i<n;i++){
            if(arr[i]==0){
                for(int j=(2*(i+1))-1;j<n;j=j+i+1){
                    arr[j]=1;
                }
            }
        }
        return arr;
    }
    public static int[][] floydWarshall(int graph[][],int V){ 
        int dist[][] = new int[V][V]; 
        int i, j, k; 
        for (i = 0; i < V; i++){ 
            for (j = 0; j < V; j++){
                dist[i][j] = graph[i][j]; 
            }
        }
        for (k = 0; k < V; k++) { 
            for (i = 0; i < V; i++){ 
                for (j = 0; j < V; j++){ 
                    if (dist[i][k] + dist[k][j] < dist[i][j]){ 
                        dist[i][j] = dist[i][k] + dist[k][j]; 
                    }
                } 
            } 
        }
        return dist;
    } 
    public static class Comp implements Comparator<pair>{
        public int compare(pair a,pair b){
            if(a.x!=b.x){
                return b.x-a.x;
            }else{
                return a.y-b.y;
            }
        }
    }
    public static long gcd(long a,long b){
        if (b == 0) 
        return a; 
        return gcd(b, a % b);
    }
    public static int lcm(int a,int b){
        int x=Math.max(a,b);
        int y=Math.min(a,b);
        long ans=x;
        while(ans%y!=0){
            ans+=x;
        }
        if(ans>Integer.MAX_VALUE){
            return -1;
        }
        return (int)ans;
    }
    public static long fact(int n){
        long ans=1;
        for(int i=1;i<=n;i++){
            ans*=i;
        }
        return ans;
    }
}