#include <bits/stdc++.h>
using namespace std;
int R[200];
int main() {
  int n;
  cin >> n;
  for (int i = (0); i < (n); i++) cin >> R[i];
  int mx = 0;
  for (int i = (0); i < (n); i++)
    if (R[i] > R[mx]) mx = i;
  int mn = 0;
  for (int i = (0); i < (n); i++)
    if (R[i] < R[mn]) mn = i;
  int eq = 1;
  for (int i = (1); i < (n); i++)
    if (R[i] != R[i - 1]) eq = 0;
  if (eq) {
    printf("%d\n", R[mx]);
    printf("0\n");
    return 0;
  }
  if (n == 2) {
    printf("0\n");
    printf("%d\n", R[mx]);
    for (int i = (0); i < (R[mx]); i++) {
      printf("11\n");
    }
    return 0;
  }
  int cntMin = R[mn];
  for (int i = (0); i < (n); i++) R[i] -= cntMin;
  int s = 0;
  for (int i = (0); i < (n); i++) s += R[i];
  vector<vector<int> > ans;
  vector<pair<int, int> > L;
  for (int i = (0); i < (n); i++) L.push_back(make_pair(R[i], i));
  sort((L).rbegin(), (L).rend());
  while (L[0].first > s / 2) {
    s += n;
    for (int i = (0); i < (n); i++) R[i]++;
    for (int i = (0); i < (n); i++) L[i].first++;
    cntMin--;
  }
  if (R[mx] <= s / 2) {
    int ind = 0;
    int acm = 0;
    while (ind < n and acm + L[ind].first <= s / 2) {
      acm += L[ind].first;
      for (int j = (0); j < (L[ind].first); j++) {
        vector<int> X;
        X.push_back(L[ind].second);
        ans.push_back(X);
      }
      ind++;
    }
    int pos = 0;
    while (ind < n) {
      for (int i = (0); i < (L[ind].first); i++) {
        ans[pos].push_back(L[ind].second);
        pos = (pos + 1) % ans.size();
      }
      ind++;
    }
    printf("%d\n", max(cntMin, 0));
    printf("%d\n", ans.size());
    for (int i = (0); i < (ans.size()); i++) {
      for (int j = (0); j < (n); j++) {
        if (find((ans[i]).begin(), (ans[i]).end(), j) != ans[i].end())
          printf("1");
        else
          printf("0");
      }
      printf("\n");
    }
    return 0;
  }
  return 0;
}
