#include <bits/stdc++.h>
using namespace std;
const int N = 65;
int f[N][N][N * N], a[N], m;
int b[N], c[N][N], g[N][N][2];
int main() {
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", a + i);
  sort(a + 1, a + m + 1);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++)
      for (int k = N * N - 1; k >= 0; k--) f[i][j][k] = -1;
  f[0][0][0] = 0;
  for (int j = 0; j < N - 1; j++)
    for (int i = 0; i <= m; i++)
      for (int k = j * (j - 1) >> 1; k < N * N; k++)
        if (f[i][j][k] != -1) {
          if (i != 0) f[i][j + 1][k + a[i]] = i;
          if (i < m) f[i + 1][j + 1][k + a[i + 1]] = i;
        }
  for (int j = 1; j < N; j++)
    if (f[m][j][j * (j - 1) >> 1] != -1) {
      int t = j, t2 = m, t3 = j * (j - 1) >> 1;
      while (t) {
        b[t] = a[t2];
        t2 = f[t2][t][t3];
        t3 -= b[t];
        t--;
      }
      int n = j;
      for (int i = n; i > 0; i--) {
        memset(g, -1, sizeof(g));
        g[0][0][0] = 0;
        int sum = 0;
        for (int j = 0; j < i - 1; j++) {
          sum += b[j];
          for (int k = 0; k <= j; k++)
            if (sum + k - j >= j * (j - 1) >> 1)
              for (int p = 0; p < 2; p++)
                if (g[j][k][p] != -1) {
                  g[j + 1][k + 1][0] = p;
                  if (b[j + 1] - 1 >= b[j] - p) g[j + 1][k][1] = p;
                }
        }
        int p;
        if (g[i - 1][b[i]][0] != -1) p = 0;
        if (g[i - 1][b[i]][1] != -1) p = 1;
        int t = i - 1, t2 = b[i];
        while (t) {
          if (p)
            c[t][i] = 1, b[t]--;
          else
            c[i][t] = 1;
          int t3 = t2;
          t2 -= 1 - p;
          p = g[t][t3][p];
          t--;
        }
      }
      printf("%d\n", n);
      for (int i = 1; i <= n; i++) {
        for (int k = 1; k <= n; k++) printf("%d", c[i][k]);
        puts("");
      }
      return 0;
    }
  puts("=");
  return 0;
}
