|
#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; }
|