#include <bits/stdc++.h>
using namespace std;
int ans = 0;
vector<tuple<int, int, int>> maxg;
int explore(vector<int> &s, vector<int> &dp, int dec,
            vector<tuple<int, int, int>> &g) {
  if (dp[dec] != -1) {
    return dp[dec];
  }
  bool flag = true;
  int max1 = -1;
  int max2 = -1;
  int max3 = -1;
  for (auto i = s.begin(); i < s.end(); i++) {
    if (*i != s[0]) {
      flag = false;
    }
    if (max1 == -1 || *i >= s[max1]) {
      max3 = max2;
      max2 = max1;
      max1 = i - s.begin();
    } else if (max2 == -1 || *i >= s[max2]) {
      max3 = max2;
      max2 = i - s.begin();
    } else if (max3 == -1 || *i >= s[max3]) {
      max3 = i - s.begin();
    }
  }
  if (flag) {
    if (s[0] > ans || maxg.empty()) {
      ans = s[0];
      maxg = g;
    }
    return s[0];
  }
  int temp = dec + 2;
  s[max1]--;
  s[max2]--;
  if (s[max2] < 0) {
    s[max2]++;
    temp--;
  }
  g.push_back(make_tuple(max1, max2, -1));
  int ans2 = explore(s, dp, temp, g);
  g.pop_back();
  s[max3]--;
  if (s[max3] < 0) {
    s[max1]++;
    s[max2] += temp - dec - 1;
    s[max3]++;
    dp[dec] = ans2;
    return ans2;
  }
  g.push_back(make_tuple(max1, max2, max3));
  int ans3 = explore(s, dp, temp + 1, g);
  g.pop_back();
  s[max1]++;
  s[max2] += temp - dec - 1;
  s[max3]++;
  dp[dec] = max(ans2, ans3);
  return max(ans2, ans3);
}
int main() {
  int n;
  cin >> n;
  vector<int> a(n);
  vector<int> dp(n * 100);
  vector<tuple<int, int, int>> games;
  for (int i = 0; i < n * 100; i++) {
    dp[i] = -1;
  }
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  if (n == 2) {
    if (a[0] == a[1]) {
      cout << a[0] << endl;
      cout << 0;
      return 0;
    }
    cout << 0 << endl;
    cout << max(a[0], a[1]) << endl;
    for (int i = 0; i < max(a[0], a[1]); i++) cout << 1 << 1 << endl;
    return 0;
  }
  explore(a, dp, 0, games);
  cout << ans << endl;
  cout << maxg.size() << endl;
  for (int j = 0; j < maxg.size(); ++j) {
    vector<int> temp(n, 0);
    temp[get<0>(maxg[j])] = 1;
    temp[get<1>(maxg[j])] = 1;
    int z = get<2>(maxg[j]);
    if (z != -1) temp[z] = 1;
    for (int i = 0; i < n; ++i) {
      cout << temp[i];
    }
    cout << endl;
  }
  return 0;
}
