#include <bits/stdc++.h>
using namespace std;
int a[107], b[107];
int ans[10000007];
int n, nMax, nMaxid, times, nMin, aol, aMin, aMax, aL;
void init() {
  memset(a, 0, sizeof(a));
  memset(ans, 0, sizeof(ans));
  memset(b, 0, sizeof(b));
  aol = 0;
  aL = 0;
}
int check(int x) {
  nMax = 0;
  times = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] > nMax) {
      nMax = a[i];
      nMaxid = i;
      times = 0;
    }
    if (a[i] == nMax) times++;
  }
  if (times < x) return 1;
  return 0;
}
void makeans(int x) {
  times -= x;
  for (int i = 1; i <= n; i++)
    if (a[i] == nMax) {
      x--;
      a[i]--;
      ans[++aol] = i;
      if (x == 0) break;
    }
  ++aol;
  aL++;
}
void printans(int x) {
  if (ans[x] == 0) {
    for (int i = 1; i <= n; i++) printf("%d", b[i]);
    printf("\n");
    memset(b, 0, sizeof(b));
  } else
    b[ans[x]] = 1;
}
int main() {
  while (scanf("%d", &n) != EOF) {
    init();
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    while (check(2)) {
      int yMax = -1, yID = 0;
      for (int i = 1; i <= n; i++)
        if (a[i] > yMax) {
          if (i == nMaxid) continue;
          yMax = a[i];
          yID = i;
        }
      ans[++aol] = yID;
      ans[++aol] = nMaxid;
      ++aol;
      aL++;
      if (a[yID]) a[yID]--;
      a[nMaxid]--;
    }
    aMin = 107;
    aMax = 0;
    for (int i = 1; i <= n; i++)
      if (a[i] < aMin) aMin = a[i];
    while (check(n)) {
      if (times % 2 == 1) makeans(3);
      while (times) makeans(2);
    }
    printf("%d\n%d\n", aMin, aL);
    for (int i = 1; i <= aol; i++) printans(i);
  }
  return 0;
}
