#include <bits/stdc++.h>
using namespace std;
const int MX = 65;
int m, a[MX], mem[35][MX][MX * MX][2], adj[MX][MX];
vector<pair<int, int> > d;
int dp(int i, int k, int sum, int f) {
  if (!k) return sum == 0 && (i == -1 || (i == 0 && f));
  if (i < 0 || sum < 0) return 0;
  if (sum < k * (k - 1) / 2) return 0;
  int &res = mem[i][k][sum][f];
  if (res != -1) return res;
  res = dp(i, k - 1, sum - a[i], 1);
  if (f) res |= dp(i - 1, k, sum, 0);
  return res;
}
void rec(int i, int k, int sum) {
  if (!k) return;
  if (dp(i, k - 1, sum - a[i], 1)) {
    d.emplace_back(a[i], d.size());
    return rec(i, k - 1, sum - a[i]);
  }
  rec(i - 1, k, sum);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  memset(mem, -1, sizeof(mem));
  cin >> m;
  for (int i = 0; i < m; i++) cin >> a[i];
  sort(a, a + m);
  for (int n = 1; n < MX; n++)
    if (dp(m - 1, n, n * (n - 1) / 2, 0)) {
      rec(m - 1, n, n * (n - 1) / 2);
      while (d.size()) {
        sort(d.begin(), d.end());
        for (int i = 0; i < (int)d.size() - 1; i++) {
          if (i < d.back().first)
            adj[d.back().second][d[i].second] = 1;
          else {
            adj[d[i].second][d.back().second] = 1;
            d[i].first--;
          }
        }
        d.pop_back();
      }
      cout << n << '\n';
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) cout << adj[i][j];
        cout << '\n';
      }
      return 0;
    }
  cout << "=(" << '\n';
  return 0;
}
