You are given a sequence a of length n consisting of 0s and 1s.

You can perform the following operation on this sequence: 

  * Pick an index i from 1 to n-2 (inclusive). 
  * Change all of a_{i}, a_{i+1}, a_{i+2} to a_{i} ⊕ a_{i+1} ⊕ a_{i+2} simultaneously, where ⊕ denotes the [bitwise XOR operation](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)

Find a sequence of at most n operations that changes all elements of a to 0s or report that it's impossible.

We can prove that if there exists a sequence of operations of any length that changes all elements of a to 0s, then there is also such a sequence of length not greater than n.

Input

Each test contains multiple test cases. The first line contains the number of test cases t (1 ≤ t ≤ 10^4).

The first line of each test case contains a single integer n (3 ≤ n ≤ 2⋅10^5) — the length of a.

The second line of each test case contains n integers a_1, a_2, …, a_n (a_i = 0 or a_i = 1) — elements of a.

It is guaranteed that the sum of n over all test cases does not exceed 2⋅10^5.

Output

For each test case, do the following: 

  * if there is no way of making all the elements of a equal to 0 after performing the above operation some number of times, print "NO". 
  * otherwise, in the first line print "YES", in the second line print k (0 ≤ k ≤ n) — the number of operations that you want to perform on a, and in the third line print a sequence b_1, b_2, ..., b_k (1 ≤ b_i ≤ n - 2) — the indices on which the operation should be applied. 



If there are multiple solutions, you may print any.

Example

Input


3
3
0 0 0
5
1 1 1 1 0
4
1 0 0 1


Output


YES
0
YES
2
3 1
NO

Note

In the first example, the sequence contains only 0s so we don't need to change anything.

In the second example, we can transform [1, 1, 1, 1, 0] to [1, 1, 0, 0, 0] and then to [0, 0, 0, 0, 0] by performing the operation on the third element of a and then on the first element of a.

In the third example, no matter whether we first perform the operation on the first or on the second element of a we will get [1, 1, 1, 1], which cannot be transformed to [0, 0, 0, 0].
#include <bits/stdc++.h>
using namespace std;

#define fr(i,n) for(int i = 0; i<n; i++)
#define sz(v) (int)(v.size())
#define prin(a) cout << #a << " = " << a << endl
#define prinv(v) cout << #v << " = "; for(auto it : v) cout << it << ", "; cout << endl
#define all(v) (v).begin(),(v).end()

typedef long long ll;

#define rmin(a,b) a = min<ll>(a,b)
#define rmax(a,b) a = max<ll>(a,b)

#define fi first
#define se second

template<typename T = int> vector<T> create(size_t n){ return vector<T>(n); }
template<typename T, typename... Args> auto create(size_t n, Args... args){ return vector<decltype(create<T>(args...))>(n, create<T>(args...)); }

vector<int> v;
vector<int> ans;

void oper(int i){
	assert(i>=0 and i+2<sz(v));
	int x = v[i]^v[i+1]^v[i+2];
	v[i] = x;
	v[i+1] = x;
	v[i+2] = x;
	ans.push_back(i);
}

void no(){
	cout << "NO\n";
}

void yes(){
	cout << "YES\n";
}

#define assert my_assert
void assert(int ok){
	if(!ok){
		prin(ok);
		freopen("input_errado","a", stdout);
		cout << "Erro - checar input_aux.txt" << endl;
		exit(0);
	}
}

int main(){
	ios::sync_with_stdio(0); cin.tie(0);
	int t; cin >> t;
	fr(tt,t){
		int n; cin >> n;
		v.resize(n);
		fr(i,n) cin >> v[i];
		int p1 = -1, u1 = -1;
		int n1 = 0;
		fr(i,n){
			if(v[i]){
				if(p1==-1) p1 = i;
				u1 = i;
				n1++;
			}
		}
		if(n1%2 or n1==n){
			no();
			continue;	
		}
		if(n1==0){
			yes();
			cout << 0 << "\n";
			continue;
		}
		ans.clear();
		/*
		prin(n1);
		prin(p1);
		prin(u1);
		prinv(v);
		*/
		for(int i = p1; i+2<n and i+2<=u1; i++){
			if(v[i] and v[i+1]==0 and v[i+2]==0) oper(i);
		} 
		//prinv(v);
		
		int p0 = 0;
		while(p0<n and v[p0]) p0++;
		if(p0==n){
			no();
			continue;
		}
		int n1a = p0;
		if(p1){
			p0 = p1-1;
			n1a = 0;
		}
		/*
		prin(p0);
		prin(n1a);
		*/
		
		int p0b = p0-2, p0f = p0;
		if(n1a%2) oper(p0-1), p0b = p0-3, p0f = p0+1;
		while(p0b>=0){
			while(p0b+2>=n) p0b--;
			//prin(p0b);
			int q0 = 0;
			fr(di,3) q0+=v[p0b+di];
			if(q0==0) break;
			assert(q0<3);
			if(q0==1){
				p0b--;
			} else{
				oper(p0b);
				p0b-=2;
			}
			//prinv(v);
			//prin(p0b);
		}	
		//cout << endl;
		
		while(p0f+2<n){
			int q0 = 0;
			fr(di,3) q0+=v[p0f+di];
			if(q0==0) break;
			assert(q0<3);
			if(q0==1){
				p0f++;
			} else{
				oper(p0f);
				p0f+=2;
			}
		}
		
		fr(i,n) assert(v[i]==0);
		
		yes();
		cout << sz(ans) << "\n";
		fr(i,sz(ans)){
			if(i) cout << " ";
			cout << ans[i];
		}	
		cout << "\n";
		//cout << endl;
	}	
}
