|
#include <stdio.h>
#include <string.h>

int T, N, arr[16], map[16][16];

int dfs(int idx, int i)
  {
if (idx >= N)
return 1;
if (!arr[idx])
return dfs(idx + 1, idx + 2);
 for ( ; i < N; i++) {
if (!arr[i])
continue;
arr[i]--;
arr[idx]--;
map[idx][i]++;
map[i][idx]++;
if (dfs(idx, i + 1))
return 1;
arr[i]++;
arr[idx]++;
map[idx][i]--;
map[i][idx]--;
}
return 0;
}

int main()
  {
int i, j;

freopen("e:\\test\\in.txt", "r", stdin);

scanf("%d", &T);
 while (T--) {
scanf("%d", &N);
for (i = 0; i < N; i++)
scanf("%d", &arr[i]);
memset(map, 0, sizeof(map));
 if (dfs(0, 1)) {
printf("YES\n");
 for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%d ", map[i][j]);
printf("\n");
}
printf("\n");
} else
printf("NO\n\n");
}

return 0;
}

|