#include <bits/stdc++.h>
using namespace std;
const int N = 61, M = 31, Q = 61 * 60 / 2;
int n, m, q, a[N + 1], d[N + 1], p[N];
bool f[M + 1][N + 1][Q + 5], g[N + 1][N + 1];
bool cmp(int a, int b) { return d[a] < d[b]; }
void dfs(int i, int j, int k) {
  if (i == 0) return;
  for (int l = 1; l <= (j); ++l) {
    if (f[i - 1][j - l][k - l * a[i]]) {
      for (int z = 1; z <= (l); ++z) d[++q] = a[i];
      dfs(i - 1, j - l, k - l * a[i]);
      return;
    }
  }
}
int main(int argc, char *argv[]) {
  scanf("%d", &m);
  for (int i = 1; i <= (m); ++i) scanf("%d", a + i);
  sort(a + 1, a + m + 1);
  f[0][0][0] = 1;
  for (int i = 0; i < (m); ++i)
    for (int j = i; j < (N); ++j)
      for (int k = j * (j - 1) / 2; k < (Q); ++k) {
        int ni = i + 1, mxl = min((!a[ni]) ? Q : (Q - k) / a[ni], 61 - j);
        if (f[i][j][k])
          for (int l = 1; l <= (mxl); ++l) {
            int nj = j + l, nk = k + l * a[ni];
            f[ni][nj][nk] |= f[i][j][k];
          }
      }
  for (n = 1; n <= 61 && !f[m][n][n * (n - 1) / 2]; ++n)
    ;
  if (n > 61) {
    puts("=(");
    return 0;
  }
  dfs(m, n, n * (n - 1) / 2);
  for (int i = 1; i <= (n); ++i) p[i] = i;
  sort(p + 1, p + n + 1, cmp);
  for (int i = 1; i <= (n); ++i) {
    for (int j = i + 1; j <= (n); ++j) {
      if (d[p[i]])
        g[p[i]][p[j]] = 1, --d[p[i]];
      else
        g[p[j]][p[i]] = 1, --d[p[j]];
    }
    sort(p + i + 1, p + n + 1, cmp);
  }
  printf("%d\n", n);
  for (int i = 1; i <= (n); ++i) {
    int k = 0;
    for (int j = 1; j <= (n); ++j) printf("%d", g[i][j]), k += g[i][j];
    ;
    puts("");
  }
  return 0;
}
