#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 62 + 3;
const int MAX_M = 31 + 4;
int a[MAX_M], n, m, sum;
bool M[MAX_N][MAX_N];
int d[MAX_N];
bool cmp(int u, int v) { return d[u] < d[v]; }
void solve() {
  vector<int> vec;
  for (int i = 0; i < n; i++) vec.push_back(i);
  while (!vec.empty()) {
    sort(vec.begin(), vec.end(), cmp);
    int u = vec.back();
    vec.pop_back();
    for (auto v : vec)
      d[u] ? (M[u][v] = true, d[u]--) : (M[v][u] = true, d[v]--);
  }
}
void bt(int id) {
  if (id == n) {
    if (sum != n * (n - 1) / 2) return;
    for (int i = 0; i < n; i++) d[i] = a[d[i]];
    solve(), cout << n << endl;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) cout << M[i][j];
      cout << endl;
    }
    exit(0);
  }
  if (id == 0) {
    d[0] = 0, sum += a[0];
    bt(id + 1), sum -= a[0];
    return;
  }
  if (d[id - 1] + 1 < m) {
    d[id] = d[id - 1] + 1, sum += a[d[id]];
    if (sum >= id * (id + 1) / 2) bt(id + 1);
    sum -= a[d[id]];
  }
  if (d[id - 1] + n - id >= m) {
    d[id] = d[id - 1], sum += a[d[id]];
    if (sum >= id * (id + 1) / 2) bt(id + 1);
    sum -= a[d[id]];
  }
}
int main() {
  ios_base ::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  cin >> m;
  for (int i = 0; i < m; i++) cin >> a[i];
  sort(a, a + m);
  for (n = a[m - 1] + 1; n < MAX_N; n++) bt(0);
  cout << "=(\n";
  return 0;
}
