#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int N = 10010;
set<int> matches[N];
int v[110];
int main(void) {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", v + i);
  }
  int k = 0, final_rating = 0;
  while (true) {
    int maior = -1, segundo_maior = -1, id0 = 0x3f3f3f3f, id1 = 0x3f3f3f3f,
        menor = 0x3f3f3f3f;
    for (int i = 0; i < n; i++) {
      if (v[i] >= maior) {
        segundo_maior = maior;
        id1 = id0;
        maior = v[i];
        id0 = i;
      } else if (v[i] > segundo_maior) {
        segundo_maior = v[i];
        id1 = i;
      }
      menor = min(menor, v[i]);
    }
    final_rating = menor;
    if (menor == maior) break;
    if (maior != segundo_maior) {
      if (v[id0]) v[id0]--;
      if (v[id1]) v[id1]--;
      matches[k].insert(id0);
      matches[k].insert(id1);
      k++;
    } else {
      vector<int> ids;
      for (int i = 0; i < n; i++) {
        if (v[i] == maior) ids.push_back(i);
      }
      if (ids.size() % 5 == 1) {
        for (int i = 0; i < 4; i++) {
          matches[k].insert(ids[i]);
          if (v[ids[i]]) v[ids[i]]--;
        }
        k++;
      }
      for (int i = ids.size() % 5 == 1 ? 4 : 0; i < ids.size(); i += 5) {
        for (int j = 0; i + j < ids.size() and j < 5; j++) {
          matches[k].insert(ids[i + j]);
          if (v[ids[i + j]]) v[ids[i + j]]--;
        }
        k++;
      }
    }
  }
  cout << final_rating << endl;
  cout << k << endl;
  for (int i = 0; i < k; i++) {
    for (int j = 0; j < n; j++) {
      printf("%d", matches[i].count(j) ? 1 : 0);
    }
    cout << endl;
  }
  return 0;
}
