#include <bits/stdc++.h>
using namespace std;
bitset<61 * 30 + 1> dp[62][62];
int par[62][62][61 * 30 + 1], b[62], a[62], ans[62][62];
set<int> S[62];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int m;
  cin >> m;
  for (int i = 0; i < m; i++) {
    cin >> b[i];
  }
  sort(b, b + m);
  dp[0][0][0] = 1;
  int n = 62;
  for (int i = 1; i <= 61; i++) {
    for (int j = 0; j < m; j++) {
      for (int k = max(b[j], i * (i - 1) / 2); k <= 61 * 30; k++) {
        dp[i][j + 1][k] = dp[i - 1][j + 1][k - b[j]];
        if (dp[i][j + 1][k])
          par[i][j + 1][k] = j + 1;
        else {
          dp[i][j + 1][k] = dp[i - 1][j][k - b[j]];
          par[i][j + 1][k] = j;
        }
      }
    }
    if (dp[i][m][i * (i - 1) / 2]) {
      n = i;
      break;
    }
  }
  if (n == 62) {
    cout << "=(";
    return 0;
  }
  vector<int> M;
  int j = m, k = n * (n - 1) / 2;
  for (int i = n; i; i--) {
    M.push_back(j);
    int t = j;
    j = par[i][j][k];
    k -= b[t - 1];
  }
  reverse(M.begin(), M.end());
  for (int i = 0; i < n; i++) {
    a[i] = b[M[i] - 1];
    S[i].insert(i);
  }
  cout << n << '\n';
  vector<pair<int, int> > A;
  while (true) {
    int SUM = 0, r, s, B = 0;
    bool f = 0, g = 0;
    for (int i = 0; i < n; i++) {
      SUM += a[i];
      B += SUM - (i + 1) * i / 2;
      if (SUM - (i + 1) * i / 2) {
        if (!f) {
          f = 1;
          r = i;
        }
      } else {
        if (f && !g) {
          s = i;
          g = 1;
        }
      }
    }
    if (f) {
      a[r]--;
      a[s]++;
      A.push_back(pair<int, int>(r, s));
    } else {
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
          ans[i][j] = 1;
        }
      }
      break;
    }
  }
  reverse(A.begin(), A.end());
  for (auto P : A) {
    if (ans[P.second][P.first])
      swap(ans[P.second][P.first], ans[P.first][P.second]);
    else {
      for (int i = 0; i < n; i++) {
        if (ans[P.second][i] && ans[i][P.first]) {
          swap(ans[P.second][i], ans[i][P.second]);
          swap(ans[P.first][i], ans[i][P.first]);
          break;
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) cout << ans[i][j];
    cout << '\n';
  }
}
