#include <cmath>
#include <deque>
#include <algorithm>
#include <iterator>
#include <list>
#include <tuple>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <unordered_set>
#include <stack>
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <functional>
#include <numeric>
#include <iomanip> 
#include <stdio.h>
//eolibraries
#define lnf 3999999999999999999
#define inf 999999999
#define PI 3.14159265359
#define endl "\n"
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define ll long long
#define all(c) (c).begin(),(c).end()
#define sz(c) (int)(c).size()
#define mkp(a,b) make_pair(a,b)
#define make_unique(a) sort(all(a)),a.erase(unique(all(a)),a.end())
#define rsz(a,n) a.resize(n)
#define pii pair <int,int>
#define rep(i,n) for(int i = 0 ; i < n ; i++) 
#define drep(i,n) for(int i = n-1 ; i >= 0 ; i--)
#define crep(i,x,n) for(int i = x ; i < n ; i++)
#define vi vector <int> 
#define vec(s) vector<s>
#define rsz(a,n) a.resize(n)
#define rszv(a,n,v) a.resize(n,v)
#define fcin ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//eodefine

const int max_n = 300000;

using namespace std;

void slv(vi a){

	int n=sz(a);
	
	int op=1;

	vi ans;

	rep(t,max_n){
	
		int x=0,j=0;

		rep(i,n-1) {
			if(a[i]>a[i+1]){ x=max(x,a[i]); j=i;}
		} 

		if(x==0) break;

		std::function<void(int)> odo1 = [&](int idx){
			swap(a[idx],a[idx+1]);
			ans.pb(idx);
			op++;
		};
		
		std::function<void(int)> odo2 = [&](int idx){
			int v = a[idx];
			crep(k,idx,n-1) {
				if(a[k+1]>v) break;
				odo1(k);
			}
		};	
		
		std::function<void(int)> inodo1 = [&](int idx){
			odo1(idx-1);
			odo1(idx);
			odo1(idx-1);
			odo2(idx);
		};
		
		std::function<void(int)> inodo2 = [&](int idx){
			odo1(idx+1);
			odo1(idx);
			odo2(idx+1);
		};

		if(op%2!=0) {
			if(j%2==0) {
				odo2(j);
			} else {
				if(j-1>=0 and j+1<n) inodo1(j);
				else if(j+2<n) inodo2(j);
				else { odo1(j-1); inodo2(j-1); }
			}
		} else {
			if(j%2==0) {
				if(j-1>=0 and j+1<n) inodo1(j);
				else if(j+2<n) inodo2(j);
				else { odo1(j-1); inodo2(j-1); }
			} else {
				odo2(j);
			}
		}
		//dbgstrt
		// cout << x << " " << j << "\n";
		// for(auto y : a) cout << y << " ";
		// cout<<"\n\n";
		// if(t==3) break;
		//dbgend
	}

	
	cout << sz(ans) << "\n";
	for(auto x : ans) cout << x + 1 << " ";
	cout << "\n";

}

// bool ok(pair <int,vi> p) {
// 	if(p.fi > sz(p.se)*sz(p.se)) return 0;
// 	vi tmp=p.se;
// 	sort(all(tmp));
// 	if(tmp!=p.se)return 0;
// 	return 1;
// }

int main(){
fcin;
	
	int t;
	cin>>t;
	rep(_,t){
		int n;
		cin>>n;
		vi a;
		rep(i,n){int x;cin>>x;a.pb(x);}
		slv(a);
	}

	// srand(time(NULL));
	// while(true) {
	// 	int n=20;
	// 	vi usd(510,0);
	// 	vi a;
	// 	rep(i,n) {
	// 		int x=0;
	// 		while(true) {
	// 			x=rand()%n+1;
	// 			if(usd[x]==1) continue;
	// 			else break;
	// 		}
	// 		usd[x]=1;
	// 		a.pb(x);
	// 	}
	// 	cout << n << "\n";
	// 	for(auto x : a) cout << x << " ";
	// 	cout<<"\n";
	// 	slv(a);
	// 	// if(ok(slv(a)) == 0) {
	// 	// 	cout << "whaaat\n";
	// 	// 	return 0;
	// 	// }
	// }


/*
*/

    return 0;   
}
#include<bits/stdc++.h>
using namespace std ;


//mint 
using ll = long long ; 
// auto mod int
// https://youtu.be/L8grWxBlIZ4?t=9858
// https://youtu.be/ERZuLAxZffQ?t=4807 : optimize
// https://youtu.be/8uowVvQ_-Mo?t=1329 : division
const int mod = 1000000007;
//const int mod = 998244353;
struct mint {
  ll x; // typedef long long ll;
  mint(ll x=0):x((x%mod+mod)%mod){}
  mint operator-() const { return mint(-x);}
  mint& operator+=(const mint a) {
    if ((x += a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator-=(const mint a) {
    if ((x += mod-a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator*=(const mint a) { (x *= a.x) %= mod; return *this;}
  mint operator+(const mint a) const { return mint(*this) += a;}
  mint operator-(const mint a) const { return mint(*this) -= a;}
  mint operator*(const mint a) const { return mint(*this) *= a;}
  mint pow(ll t) const {
    if (!t) return 1;
    mint a = pow(t>>1);
    a *= a;
    if (t&1) a *= *this;
    return a;
  }

  // for prime mod
  mint inv() const { return pow(mod-2);}
  mint& operator/=(const mint a) { return *this *= a.inv();}
  mint operator/(const mint a) const { return mint(*this) /= a;}
};
istream& operator>>(istream& is, mint& a) { return is >> a.x;}
ostream& operator<<(ostream& os, const mint& a) { return os << a.x;}


int main(){
    int N ;
    cin >> N ; 
    vector<long long> A(N) ;
    for(int i = 0 ; i < N ; i++) cin >> A.at(i) ;
    A.insert(A.begin(),0) ;
    mint cnt = 1 ;
    sort(A.begin() , A.end()) ; 
    for(int i = 0 ; i < N ; i++){
      cnt *= A.at(i+1) - A.at(i) + 1  ; 
    }

    cout << cnt << endl;

}