#include <bits/stdc++.h>
using namespace std;
struct bottle {
  int cur, max;
};
bool comp(const pair<int64_t, int64_t>& a, const pair<int64_t, int64_t>& b) {
  return a.first < b.first;
}
bool allEqual(const vector<int>& players) {
  for (int i = 1; i < players.size(); i++) {
    if (players[i] != players[i - 1]) {
      return false;
    }
  }
  return true;
}
string decreaseTop(vector<int>& players) {
  int topScore = -1, subtopScore = -1;
  vector<int> top;
  vector<int> subtop;
  string result;
  for (int i = 0; i < players.size(); i++) {
    result += '0';
    if (players[i] > topScore) {
      subtop = top;
      subtopScore = topScore;
      top.clear();
      topScore = players[i];
      top.push_back(i);
    } else if (players[i] == topScore) {
      top.push_back(i);
    } else if (players[i] > subtopScore) {
      subtop.clear();
      subtopScore = players[i];
      subtop.push_back(i);
    } else if (players[i] == subtopScore) {
      subtop.push_back(i);
    }
  }
  int max = 5;
  if (top.size() > 5) {
    max = 4;
  }
  for (int i = 0; i < top.size(); i++) {
    if (i >= max) break;
    if (players[top[i]] > 0) {
      players[top[i]]--;
    }
    result[result.size() - 1 - top[i]] = '1';
  }
  if (top.size() < 2) {
    if (players[subtop[0]] > 0) {
      players[subtop[0]]--;
    }
    result[result.size() - 1 - subtop[0]] = '1';
  }
  result += '\n';
  return result;
}
int main() {
  int n;
  cin >> n;
  vector<int> players(n);
  while (n--) {
    cin >> players[n];
  }
  int numGames = 0;
  string results = "";
  while (!allEqual(players)) {
    results.append(decreaseTop(players));
    numGames++;
  }
  cout << players[0] << endl << numGames << endl;
  cout << results;
  return 0;
}
