#include <bits/stdc++.h>
using namespace std;
const int N = 65;
bool f[N][N][N * N], g[N][N][N * N], ans[N][N];
int a0[N], d[N], m, n = -1;
void dfs(int i, int j, int k) {
  if (!j) return;
  d[j] = a0[i];
  if (g[i][j][k])
    dfs(i - 1, j - 1, k - a0[i]);
  else
    dfs(i, j - 1, k - a0[i]);
}
int p[N];
bool cmp(int a, int b) { return d[a] < d[b]; }
int main() {
  scanf("%d", &m);
  for (register int i = 1; i <= m; ++i) scanf("%d", &a0[i]);
  sort(a0 + 1, a0 + 1 + m);
  f[0][0][0] = true;
  for (int i = 0; i <= m; i++)
    for (register int j = 0; j <= 62; ++j)
      for (register int k = 0; k <= j * 30; ++k)
        if (f[i][j][k]) {
          if (i && k + a0[i] >= (j + 1) * j / 2) f[i][j + 1][k + a0[i]] = true;
          if (i != m && k + a0[i + 1] >= (j + 1) * j / 2) {
            f[i + 1][j + 1][k + a0[i + 1]] = g[i + 1][j + 1][k + a0[i + 1]] =
                true;
          }
        }
  for (register int i = 1; i <= 62; ++i)
    if (f[m][i][i * (i - 1) / 2]) {
      n = i;
      break;
    }
  if (n == -1) {
    printf("=(\n");
    return 0;
  }
  printf("%d\n", n);
  dfs(m, n, n * (n - 1) / 2);
  for (register int i = 1; i <= n; ++i) p[i] = i;
  for (register int i = 1; i <= n; ++i) {
    sort(p + i + 1, p + n + 1, cmp);
    for (int j = i + 1; j <= i + d[p[i]]; j++) ans[p[i]][p[j]] = true;
    for (int j = i + d[p[i]] + 1; j <= n; j++)
      d[p[j]]--, ans[p[j]][p[i]] = true;
  }
  for (register int i = 1; i <= n; ++i) {
    for (register int j = 1; j <= n; ++j) printf("%d", ans[i][j] ? 1 : 0);
    printf("\n");
  }
  return 0;
}
