#include <bits/stdc++.h>
using namespace std;
const long long inf2 = 1e18;
const int inf = 1e9 + 7;
inline int add(int a, int b, int m = inf) {
  a += b;
  if (a >= m) a -= m;
  return a;
}
inline int sub(int a, int b, int m = inf) {
  a -= b;
  if (a < 0) a += m;
  return a;
}
inline int mul(int a, int b, int m = inf) {
  return (int)(((long long)a * (long long)b) % m);
}
vector<pair<int, int> > fr;
int ans[10001][101];
bool comp(pair<int, int> a, pair<int, int> b) { return a.first < b.first; }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int N, M, i, j, k;
  cin >> N;
  for (i = 0; i < N; i++) {
    fr.push_back(make_pair(0, 0));
    cin >> fr[i].first;
    fr[i].second = i;
  }
  sort(fr.begin(), fr.end(), comp);
  int it = 0;
  while (fr[0].first != fr[N - 1].first) {
    if (N > 3 and fr[N - 1].first == fr[N - 3].first and
        fr[N - 1].first != fr[N - 4].first) {
      ans[it][fr[N - 1].second] = ans[it][fr[N - 2].second] =
          ans[it][fr[N - 3].second] = 1;
      if (fr[N - 1].first != 0) fr[N - 1].first--;
      if (fr[N - 2].first != 0) fr[N - 2].first--;
      if (fr[N - 3].first != 0) fr[N - 3].first--;
    } else {
      ans[it][fr[N - 1].second] = ans[it][fr[N - 2].second] = 1;
      if (fr[N - 1].first != 0) fr[N - 1].first--;
      if (fr[N - 2].first != 0) fr[N - 2].first--;
    }
    it++;
    sort(fr.begin(), fr.end(), comp);
  }
  cout << fr[0].first << endl;
  cout << it << endl;
  for (i = 0; i < it; i++) {
    for (j = 0; j < N; j++) cout << ans[i][j];
    cout << endl;
  }
  return 0;
}
