#include <bits/stdc++.h>
using namespace std;
template <class T, size_t N>
ostream& operator<<(ostream& os, const array<T, N>& v);
template <class T1, class T2>
ostream& operator<<(ostream& os, const pair<T1, T2>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T, size_t N>
ostream& operator<<(ostream& os, const array<T, N>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const set<T1, T2>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const multiset<T1, T2>& v) {
  bool f = 1;
  os << "[";
  for (auto& i : v) {
    if (!f) os << ", ";
    os << i;
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2, class T3>
ostream& operator<<(ostream& os, const map<T1, T2, T3>& v) {
  bool f = 1;
  os << "[";
  for (auto& ii : v) {
    if (!f) os << ", ";
    os << "(" << ii.first << " -> " << ii.second << ") ";
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const multimap<T1, T2>& v) {
  bool f = 1;
  os << "[";
  for (auto& ii : v) {
    if (!f) os << ", ";
    os << "(" << ii.first << " -> " << ii.second << ") ";
    f = 0;
  }
  return os << "]";
}
template <class T1, class T2>
ostream& operator<<(ostream& os, priority_queue<T1, T2> v) {
  bool f = 1;
  os << "[";
  while (!v.empty()) {
    auto x = v.top();
    v.pop();
    if (!f) os << ", ";
    f = 0;
    os << x;
  }
  return os << "]";
}
template <class T1, class T2>
void printarray(const T1& a, T2 sz, T2 beg = 0) {
  for (T2 i = beg; i < sz; i++) cout << a[i] << " ";
  cout << endl;
}
void cio() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
}
const long long mod = 1e9 + 9;
void die() {
  printf("-1\n");
  exit(0);
}
int N;
int p[500];
void Do(int R) {
  for (int i = 1; i <= N; i++)
    if (p[i] < R) return;
  bool odd = false;
  int sum = 0;
  for (int i = 1; i <= N; i++) sum += p[i] - R;
  if (sum % 2) odd = true;
  int X;
  vector<pair<int, int> > ansv;
  set<pair<int, int> > S;
  for (int i = 1; i <= N; i++) S.insert({p[i] - R, i});
  if (odd) {
    auto it = S.end();
    it--;
    pair<int, int> pp = *it;
    X = pp.second;
    S.erase(it);
    S.insert({pp.first - 1, pp.second});
    sum--;
  }
  if (S.rbegin()->first * 2 > sum) return;
  while (true) {
    auto it1 = S.end();
    it1--;
    S.erase(it1);
    auto it2 = S.end();
    it2--;
    S.erase(it2);
    pair<int, int> p1 = *it1, p2 = *it2;
    if (p1.first == 0 || p2.first == 0) break;
    ansv.push_back({p1.second, p2.second});
    S.insert({p1.first - 1, p1.second});
    S.insert({p2.first - 1, p2.second});
  }
  if (odd && (int)ansv.size() == 0) return;
  if (odd) {
    bool flag = false;
    for (auto e : ansv) {
      if (e.first != X && e.second != X) flag = true;
    }
    if (!flag) return;
  }
  printf("%d\n", R);
  printf("%d\n", (int)ansv.size());
  for (auto e : ansv) {
    for (int i = 1; i <= N; i++) {
      if (e.first == i || e.second == i)
        printf("1");
      else if (odd && (e.first != X && e.second != X) && i == X) {
        odd = false;
        printf("1");
      } else
        printf("0");
    }
    printf("\n");
  }
  exit(0);
}
int main() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) scanf("%d", &p[i]);
  for (int x = 100; x >= 1; x--) {
    Do(x);
  }
  printf("0\n");
  vector<pair<int, int> > ansv;
  while (p[1] > 0 && p[2] > 0) {
    p[1]--;
    p[2]--;
    ansv.push_back({1, 2});
  }
  int X = 1;
  if (p[2] == 0) X = 2;
  for (int i = 1; i <= N; i++)
    if (i != X) {
      while (p[i] > 0) {
        p[i]--;
        ansv.push_back({X, i});
      }
    }
  printf("%d\n", (int)ansv.size());
  for (auto e : ansv) {
    for (int i = 1; i <= N; i++) {
      if (e.first == i || e.second == i)
        printf("1");
      else
        printf("0");
    }
    printf("\n");
  }
}
