/*
Name: Havel-Hakiwi定理的应用
Copyright:
Author: Try86
Date: 13/04/12 23:16
Description:
*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
int map[15][15], flag;
struct node {
int deg; //顶点度数
int ver; //顶点编号
}d[15];
int cmp(const void *a, const void *b) {
return ((node *)b)->deg - ((node *)a)->deg;
}
void Havel_Hakiwi(int n) {
for (int i=0; i<n; ++i) {
qsort(d, n, sizeof(node), cmp);
int s = d[0].deg;
d[0].deg = 0;
if (s > n-i-1) {
flag = 0;
return ;
}
for (int j=1; j<=s; ++j) {
--d[j].deg;
if (d[j].deg < 0) {
flag = 0;
return ;
}
map[d[0].ver][d[j].ver] = map[d[j].ver][d[0].ver] = 1;
}
if (!flag) return ;
}
return ;
}
int main() {
int t;
scanf ("%d", &t);
while (t--) {
int n;
scanf ("%d", &n);
memset(map, 0, sizeof(map));
for (int i=0; i<n; ++i) {
scanf ("%d", &d[i].deg);
d[i].ver = i;
}
flag = 1;
Havel_Hakiwi(n);
if (flag) {
printf ("YES\n");
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j) {
if (j) printf (" %d", map[i][j]);
else printf ("%d", map[i][j]);
}
printf ("\n");
}
}
else printf ("NO\n");
printf ("\n"); //注意输出一空行,不然判WA,不是PE
}
return 0;
}