#include <bits/stdc++.h>
using namespace ::std;
const int maxn = 70;
const int maxm = 32;
bool ger[maxn][maxn];
void solv(vector<int> vec) {
  vector<pair<int, int> > ver;
  for (int i = 0; i < (int)vec.size(); i++) {
    ver.push_back(make_pair(vec[i], i));
  }
  while (ver.size()) {
    sort(ver.begin(), ver.end());
    int v = ver.back().second;
    int w = ver.back().first;
    ver.pop_back();
    for (int i = 0; i < w; i++) {
      ger[v][ver[i].second] = 1;
    }
    for (int i = w; i < ver.size(); i++) {
      ger[ver[i].second][v] = 1;
      ver[i].first--;
    }
  }
  cout << vec.size() << endl;
  for (int i = 0; i < vec.size(); i++) {
    for (int j = 0; j < vec.size(); j++) {
      cout << ger[i][j];
    }
    cout << endl;
  }
  exit(0);
}
int doaz(int a) { return (a * (a - 1)) / 2; }
bool dp[maxm][maxn][maxn * maxm];
pair<int, int> upd[maxm][maxn][maxn * maxm];
int a[maxm];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  sort(a, a + n);
  dp[0][0][0] = 1;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j < maxn; j++) {
      for (int k = 0; k <= j * maxm; k++) {
        if (dp[i][j][k]) {
          if (i != 0 && k + a[i - 1] >= doaz(j + 1)) {
            dp[i][j + 1][k + a[i - 1]] = 1;
            upd[i][j + 1][k + a[i - 1]] = make_pair(i, k);
          }
          if (i != n && k + a[i] >= doaz(j + 1)) {
            dp[i + 1][j + 1][k + a[i]] = 1;
            upd[i + 1][j + 1][k + a[i]] = make_pair(i, k);
          }
        }
      }
    }
  }
  for (int j = 1; j < maxn; j++) {
    if (dp[n][j][doaz(j)]) {
      vector<int> vec;
      pair<int, pair<int, int> > r = make_pair(n, make_pair(j, doaz(j)));
      while (r.second.first) {
        pair<int, pair<int, int> > nr = make_pair(
            upd[r.first][r.second.first][r.second.second].first,
            make_pair(r.second.first - 1,
                      upd[r.first][r.second.first][r.second.second].second));
        vec.push_back(r.second.second - nr.second.second);
        r = nr;
      }
      solv(vec);
    }
  }
  cout << "=(";
}
