#include <bits/stdc++.h>
using namespace std;
priority_queue<pair<int, int> > q;
int a[110], n;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  int maxx = -1, maxxpos = 0, minn = 110, minnpos = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] > maxx) {
      maxx = a[i];
      maxxpos = i;
    }
    if (a[i] < minn) {
      minn = a[i];
      minnpos = i;
    }
  }
  int ans = minn;
  while (ans > 0) {
    int sum = 0;
    for (int i = 1; i <= n; i++)
      if (i != maxxpos) {
        sum += a[i] - ans;
      }
    if (maxx - ans <= sum) break;
    ans--;
  }
  printf("%d\n", ans);
  int sum = 0;
  int summinus = 0;
  for (int i = 1; i <= n; i++)
    if (i != maxxpos) {
      sum += a[i] - ans;
    }
  if (maxx - ans <= sum) {
    for (int i = 1; i <= n; i++) summinus += a[i] - ans;
    printf("%d\n", summinus / 2);
    while (!q.empty()) q.pop();
    for (int i = 1; i <= n; i++) q.push(make_pair(a[i], i));
    if (summinus & 1) {
      pair<int, int> temp1 = q.top();
      q.pop();
      pair<int, int> temp2 = q.top();
      q.pop();
      pair<int, int> temp3 = q.top();
      q.pop();
      if (temp1.first > 0) temp1.first--;
      q.push(temp1);
      int pos1 = temp1.second;
      if (temp2.first > 0) temp2.first--;
      q.push(temp2);
      int pos2 = temp2.second;
      if (temp3.first > 0) temp3.first--;
      q.push(temp3);
      int pos3 = temp3.second;
      for (int i = 1; i <= n; i++)
        if (i == pos1 || i == pos2 || i == pos3)
          printf("1");
        else
          printf("0");
      puts("");
      summinus -= 3;
    }
    for (; summinus > 0; summinus -= 2) {
      pair<int, int> temp1 = q.top();
      q.pop();
      pair<int, int> temp2 = q.top();
      q.pop();
      if (temp1.first > 0) temp1.first--;
      q.push(temp1);
      int pos1 = temp1.second;
      if (temp2.first > 0) temp2.first--;
      q.push(temp2);
      int pos2 = temp2.second;
      for (int i = 1; i <= n; i++)
        if (i == pos1 || i == pos2)
          printf("1");
        else
          printf("0");
      puts("");
    }
  } else {
    printf("%d\n", maxx);
    while (!q.empty()) q.pop();
    for (int i = 1; i <= n; i++) q.push(make_pair(a[i], i));
    for (; maxx > 0; maxx--) {
      pair<int, int> temp1 = q.top();
      q.pop();
      pair<int, int> temp2 = q.top();
      q.pop();
      if (temp1.first > 0) temp1.first--;
      q.push(temp1);
      int pos1 = temp1.second;
      if (temp2.first > 0) temp2.first--;
      q.push(temp2);
      int pos2 = temp2.second;
      for (int i = 1; i <= n; i++)
        if (i == pos1 || i == pos2)
          printf("1");
        else
          printf("0");
      puts("");
    }
  }
  return 0;
}
