#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//看博友分析 抄博友程序 POJac 百练wa 可图定理 背
struct nod{
int id;
int du;
};
nod da[20];
bool cmp(nod a, nod b)
{
return a.du>b.du;
}
int mp[20][20];
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
memset(mp,0,sizeof(mp));
memset(da,0,sizeof(da));
for(int i=1;i<=n;i++)
{
cin>>da[i].du;
da[i].id=i;
}
sort(da+1,da+n+1,cmp);
int flag=0;
for(int i=1;i<=n;i++)
{
for(int j=2;j<=da[1].du+1;j++)
{
da[j].du--;
if(da[j].du<0)
{
flag=1;
}else
{
mp[da[1].id][da[j].id]=mp[da[j].id][da[1].id]=1;
}
}
da[1].du=0;//抄博友程序
sort(da+1,da+n+1,cmp);
/*
for(int k=1;k<=n;k++)
{
cout<<da[k].du<<" ";
}
cout<<endl;*/
}
if(flag==0)
{
cout<<"YES"<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j==1)
{
cout<<mp[i][j];
}else
{
cout<<" "<<mp[i][j];
}
}
cout<<endl;
}
}else
{
cout<<"NO"<<endl;
}
cout<<endl;
}
return 0;
}