题目链接:http://poj.org/problem?id=1659
//C++代码
#include<iostream>
#include<algorithm>
using namespace std;
struct Edge{
int id,deg;
bool operator <(const Edge& E) const{
return deg>E.deg;
}
}e[10];
int main(){
int t,n,i,j,a[10][10];
cin>>t;
while(t--){
cin>>n;
for(i=0;i<n;i++){
for(j=0;j<n;j++) a[i][j]=0;
}
for(i=0;i<n;i++){
cin>>e[i].deg;
e[i].id=i;
}
bool flag=true;
i=0;
while(flag){
sort(e+i,e+n);
if(e[i].deg==0) break;
for(j=i+1;j<=i+e[i].deg;j++){
if(e[j].deg-1>=0){
a[e[i].id][e[j].id]=a[e[j].id][e[i].id]=1;
e[j].deg--;
}
else{
flag=false;
break;
}
}
i++;
}
if(!flag) cout<<"NO"<<endl;
else{
cout<<"YES"<<endl;
for(i=0;i<n;i++){
for(j=0;j<n-1;j++) cout<<a[i][j]<<" ";
cout<<a[i][n-1]<<endl;
}
}
if(t>0) cout<<endl;
}
return 0;
}