#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <utility>
#define FOR(i,l,r) for(int i = l; i <= r ;++i)
#define FORD(i,l,r) for(int i = l; i >= r;--i)
using namespace std;

int a[1111];
int b[33];
//#define debug(x) cout << #x <<" " <<x <<endl
#define pb push_back
vector<int> V, tmpV;
typedef pair<int,pair<int,int > > pii;
vector<pii> P;

int main( ){
	int T;
	cin >> T;
	while( T-- ) {
		int K; cin >> K;
		V.clear();
		int n ; cin >> n;
		P.clear();
		for (int i = 1; i <= n;++i) {
			cin >> a[ i ];
			V.pb(i);
		}
		int Times = n - 2;
		bool flg = 0;
		while (Times --) {
			int goal[3] = { -1 , -1 , -1 };

			for (int i = 0 ; i < V.size();++i) {
				if (a[ V[i] ] == 1) {
					goal[0] = i;
					goal[1] = i - 1 < 0 ? V.size()-1 : i - 1;
					goal[2] = i + 1 == V.size() ? 0 : i + 1;
					break;
				}
			}

			if (goal[ 0 ] == -1 || V.size() < 3) {
				flg = 1;
				break;
			}	
		
			b[ 0 ] = V[goal[0]];
			b[ 1 ] = V[goal[1]];
			b[ 2 ] = V[goal[2]];
			
			/*for ( int o = 2; o ; --o) {
				if (!( -- a[ b[o] ]) ) {
					//debug(goal[o]);
					//debug(V.size());
					V.erase( lower_bound(V.begin(),V.end(),b[o]));
				}
			}*/
			tmpV.clear();
			for ( int o = 2; o >=0  ; --o) {
				if (!( -- a[ b[o] ]) ) {
					V[goal[o]]=0;
				}
			}
			for (int o = 0; o < V.size(); ++o) {
				if (V[o] != 0) {
					tmpV.pb(V[o]);
				}
			}
			V = tmpV;
/*			for( int db = 0; db < V.size(); ++db) {
				debug(db);
				debug(V[db]);
			}*/
			sort(b, b+3);
			P.pb(make_pair(b[0],make_pair(b[1], b[2])));
		}
		sort(P.begin(),P.end());
		if(flg) {
			cout << K <<" N" <<endl;
		}
		else {
			cout << K << " Y" << endl;
			for( int i = 0; i < P.size(); ++i) {
				cout << P[i].first <<" " << P[i].second.first <<" " << P[i].second.second<<endl;
			}
		}
	}
	return 0;
}

