#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;
  vector<pair<int, int> > v(n);
  for (int i = 0; i < n; ++i) {
    cin >> v[i].first;
    v[i].second = i;
  }
  sort(v.begin(), v.end(),
       [](const pair<int, int> &a, const pair<int, int> &b) { return b < a; });
  vector<vector<int> > history;
  int minVal = v.back().first;
  while (v[0].first != v[1].first) {
    for (int i = v.size() - 1; i > 1; i--) {
      while (minVal < v[i].first) {
        history.push_back({v[0].second, v[i].second});
        v[0].first--;
        v[i].first--;
        if (v[0].first == v[1].first) {
          break;
        }
      }
      if (v[0].first == v[1].first) {
        break;
      }
    }
    if (v[0].first == v[1].first) {
      break;
    }
    minVal--;
    if (minVal == 0) {
      v.back().first = 0;
      while (v[0].first != v[1].first) {
        history.push_back({v[0].second, v.back().second});
        v[0].first--;
      }
      break;
    }
  }
  int cur = 2;
  while (cur < n) {
    while (cur < n && v[cur].first == v[0].first) cur++;
    if (cur == n) break;
    while (v[0].first > v[cur].first) {
      int beg = 0;
      if (cur & 1) {
        history.push_back({v[0].second, v[1].second, v[2].second});
        v[0].first--;
        v[1].first--;
        v[2].first--;
        beg = 3;
      }
      for (int i = beg; i < cur; i += 2) {
        history.push_back({v[i].second, v[i + 1].second});
        v[i].first--;
        v[i + 1].first--;
      }
    }
  }
  cout << v[0].first << endl;
  cout << history.size() << endl;
  string s(n, '0');
  for (auto h : history) {
    for (int i : h) {
      s[i] = '1';
    }
    cout << s << endl;
    for (int i : h) {
      s[i] = '0';
    }
  }
  return 0;
}
