#include <bits/stdc++.h>
using namespace std;
const int N = 1001;
const int M = 300000;
int n, m, a[N], b[N];
vector<bool> g[M];
pair<int, int> p[N];
priority_queue<pair<int, int> > q;
bool solve(int x) {
  if (x == 0) return true;
  for (int i = 1; i <= n; i++) b[i] = a[i] - x;
  int sum = 0;
  for (int i = 1; i <= n; i++) sum += b[i];
  sort(b + 1, b + n + 1);
  reverse(b + 1, b + n + 1);
  if (sum & 1) {
    b[1]--;
    b[2]--;
    b[3]--;
  }
  sort(b + 1, b + n + 1);
  reverse(b + 1, b + n + 1);
  if (b[n] < 0) return false;
  for (int i = 1; i <= n; i++)
    if (b[i] > 0) q.push(make_pair(b[i], i));
  while (!q.empty()) {
    pair<int, int> v = q.top();
    q.pop();
    if (q.empty()) return false;
    pair<int, int> u = q.top();
    q.pop();
    v.first--;
    u.first--;
    if (v.first > 0) q.push(v);
    if (u.first > 0) q.push(u);
  }
  return true;
}
void getSolution(int x) {
  if (x == 0) {
    m = 0;
    for (int i = 1; i < n; i++) {
      for (int j = 1; j <= 100; j++) {
        m++;
        for (int k = 1; k <= n; k++)
          if (k == i || k == i + 1)
            g[m][k - 1] = true;
          else
            g[m][k - 1] = false;
      }
    }
    return;
  }
  for (int i = 1; i <= n; i++) b[i] = a[i] - x;
  for (int i = 1; i <= n; i++)
    if (b[i] > 0) q.push(make_pair(b[i], i));
  int sum = 0;
  for (int i = 1; i <= n; i++) sum += b[i];
  int game = 0;
  while (!q.empty()) {
    game++;
    if (sum & 1) {
      pair<int, int> a = q.top();
      q.pop();
      if (q.empty()) assert(false);
      pair<int, int> b = q.top();
      q.pop();
      if (q.empty()) assert(false);
      pair<int, int> c = q.top();
      q.pop();
      for (int j = 1; j <= n; j++)
        if (j == a.second || j == b.second || j == c.second)
          g[game][j - 1] = true;
        else
          g[game][j - 1] = false;
      a.first--;
      b.first--;
      c.first--;
      if (a.first > 0) q.push(a);
      if (b.first > 0) q.push(b);
      if (c.first > 0) q.push(c);
      sum -= 3;
    } else {
      pair<int, int> a = q.top();
      q.pop();
      if (q.empty()) assert(false);
      pair<int, int> b = q.top();
      q.pop();
      for (int j = 1; j <= n; j++)
        if (j == a.second || j == b.second)
          g[game][j - 1] = true;
        else
          g[game][j - 1] = false;
      a.first--;
      b.first--;
      if (a.first > 0) q.push(a);
      if (b.first > 0) q.push(b);
    }
  }
  m = game;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  int minval = a[1];
  for (int i = 2; i <= n; i++) minval = min(minval, a[i]);
  for (int i = 1; i <= 10000; i++) g[i].resize(n);
  int ans = 0;
  for (int i = minval; i >= 0; i--)
    if (solve(i)) {
      ans = i;
      break;
    }
  cout << ans << endl;
  getSolution(ans);
  cout << m << endl;
  for (int i = 1; i <= m; i++) {
    for (int j = 0; j < g[i].size(); j++) cout << g[i][j];
    cout << endl;
  }
  return 0;
}
