#include <bits/stdc++.h>
using namespace std;
template <class T, class U>
void ckmin(T &a, U b) {
  if (a > b) a = b;
}
template <class T, class U>
void ckmax(T &a, U b) {
  if (a < b) a = b;
}
int N;
int arr[1013];
vector<pair<int, int> > guys;
int up[1013], dn[1013];
bitset<1013> ans[1013];
bitset<1013> used;
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(12);
  cerr << fixed << setprecision(4);
  cin >> N;
  for (auto i = (0); i < (N); i++) {
    cin >> arr[i];
  }
  for (auto i = (0); i < (N + 1); i++) {
    up[i] = N;
    dn[i] = 0;
  }
  for (auto i = (0); i < (N); i++) {
    for (auto j = (0); j < (N); j++) {
      if (up[j] == j) {
        continue;
      }
      int szr = up[j + 1] - (j + 1) + 1;
      int szl = j - dn[j] + 1;
      int lt = dn[j], rt = up[j + 1];
      if (szr <= arr[i] && szl <= N + 1 - arr[i]) {
        for (auto k = (j + 1); k < (rt + 1); k++) {
          ans[i][k] = 1;
        }
      } else if (szl <= arr[i] && szr <= N + 1 - arr[i]) {
        for (auto k = (lt); k < (j + 1); k++) {
          ans[i][k] = 1;
        }
      } else {
        continue;
      }
      int rem = arr[i] - ans[i].count();
      for (auto k = (0); k < (N + 1); k++) {
        if (lt <= k && k <= rt) continue;
        if (rem) {
          rem--;
          ans[i][k] = 1;
        }
      }
      for (auto k = (lt); k < (j + 1); k++) {
        up[k] = j;
      }
      for (auto k = (j + 1); k < (rt + 1); k++) {
        dn[k] = j + 1;
      }
      break;
    }
  }
  for (auto i = (0); i < (N + 1); i++) {
    for (auto j = (0); j < (N); j++) {
      if (ans[j][i]) {
        used[i] = true;
      }
    }
  }
  cout << used.count() << '\n';
  for (auto i = (0); i < (N + 1); i++) {
    if (!used[i]) continue;
    for (auto j = (0); j < (N); j++) {
      cout << ans[j][i];
    }
    cout << '\n';
  }
  return 0;
}
