#include <bits/stdc++.h>
using namespace std;
#define TR(i,v)         for(__typeof((v).begin())i=(v).begin();i!=(v).end();++i)
#define DEBUG(x)        cout << #x << " = " << x << endl;
#define SIZE(p)         (int)(p).size()
#define MP(a, b)        make_pair((a), (b))
#define ALL(p)          (p).begin(), (p).end()
#define rep(i, n)       for(int (i)=0; (i)<(int)(n); ++(i))
#define REP(i, a, n)    for(int (i)=(a); (i)<(int)(n); ++(i))
#define FOR(i, a, b)    for(int (i)=(int)(a); (i)<=(int)(b); ++(i))
#define FORD(i, b, a)   for(int (i)=(int)(b); (i)>=(int)(a); --(i))
#define CLR(x, y)       memset((x), (y), sizeof((x)))
typedef long long LL;
typedef pair<int, int> pii;

int main(int argc, char const *argv[]) {
#ifndef ONLINE_JUDGE
    freopen("G.in", "r", stdin);
    // freopen("out", "w", stdout);
#endif
    // ios::sync_with_stdio(false);		cin.tie(0);
    int T,cs;	scanf("%d",&T);
    while(T--) {
    	scanf("%d",&cs);	printf("%d ",cs);
    	int n;	static int C[25];
    	scanf("%d",&n);
    	rep(i,n)	scanf("%d",C+i);
    	vector<vector<int> > res;
    	bool suc=0;
    	rep(sss,n*5) {
    		int u=-1;
    		rep(i,n) if(C[i]==1)	u=i;
    		if(u==-1)	break;
    		int l=-1, r=-1, j;
    		j=(u+n-1)%n;
    		rep(step,n-1) {
    			if(C[j]) {
    				l=j;	break;
    			}
    			j=(j+n-1)%n;
    		}
    		j=(u+1)%n;
    		rep(step,n-1) {
    			if(C[j]) {
    				r=j;	break;
    			}
    			j=(j+1)%n;
    		}
    		if(l==-1 || r==-1 || l==r)	break;
    		vector<int> rr={l,u,r};	sort(ALL(rr));
    		res.push_back(rr);
    		--C[l],--C[u],--C[r];
    		if(*max_element(C,C+n)==0)	{
    			suc=1;	break;
    		}
    	}
    	if(suc) {
    		puts("Y");
    		sort(ALL(res));
    		for(auto &e:res)
    			printf("%d %d %d\n",e[0]+1,e[1]+1,e[2]+1);
    	}else {
    		puts("N");    		
    	}
    }
    return 0;
}