#include <bits/stdc++.h>
using namespace std;
const int N = 62;
const int M = 35;
int a[M];
int m;
int dp[N][M][30 * N];
int pre[N][M][30 * N];
int minn = 0;
int d[N];
int G[N][N];
int tem[N];
bool cmp(int x, int y) { return d[x] < d[y]; }
int main() {
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", &a[i]);
  sort(a + 1, a + 1 + m);
  memset(dp, 0, sizeof(dp));
  dp[1][1][a[1]] = 1;
  for (int i = 1; i < N; i++) {
    for (int j = 1; j <= m; j++) {
      for (int k = a[j]; k < 30 * N; k++) {
        if (!dp[i][j][k]) continue;
        if (k + a[j] < 30 * N && k + a[j] >= (i + 1) * i / 2) {
          dp[i + 1][j][k + a[j]] = 1;
          pre[i + 1][j][k + a[j]] = j;
        }
        if (k + a[j + 1] < 30 * N && k + a[j + 1] >= (i + 1) * i / 2) {
          dp[i + 1][j + 1][k + a[j + 1]] = 1;
          pre[i + 1][j + 1][k + a[j + 1]] = j;
        }
      }
    }
  }
  for (int i = 1; i < N; i++) {
    if (dp[i][m][i * (i - 1) / 2]) {
      minn = i;
      break;
    }
  }
  if (!minn) {
    printf("=(\n");
    return 0;
  }
  printf("%d\n", minn);
  for (int i = minn, j = m, k = minn * (minn - 1) / 2; i >= 1; i--) {
    d[i] = a[j];
    k -= a[j];
    j = pre[i][j][k + a[j]];
  }
  for (int i = 1; i <= minn; i++) tem[i] = i;
  for (int i = 1; i <= minn; i++) {
    sort(tem + i, tem + 1 + minn, cmp);
    for (int j = i + 1; j <= i + d[tem[i]]; j++) G[tem[i]][tem[j]] = 1;
    for (int j = i + d[tem[i]] + 1; j <= minn; j++) {
      G[tem[j]][tem[i]] = 1;
      d[tem[j]]--;
    }
  }
  for (int i = 1; i <= minn; i++) {
    for (int j = 1; j <= minn; j++) {
      if (G[i][j])
        printf("1");
      else
        printf("0");
    }
    printf("\n");
  }
}
