#include <bits/stdc++.h>
using namespace std;
pair<int, int> a[105];
int n;
vector<vector<int> > res;
void addToAns(int ind, int cnt) {
  if (!cnt) return;
  for (int i = 0; i < res.size(); ++i) {
    if (res[i].size() == 1) {
      res[i].push_back(ind);
      --cnt;
      if (!cnt) return;
    }
  }
  for (int i = 0; i < res.size(); ++i) {
    if (res[i].size() < 5) {
      int containsInd = 0;
      for (int k = 0; k < res[i].size(); ++k) {
        if (res[i][k] == ind) {
          containsInd = 1;
          break;
        }
      }
      if (containsInd) continue;
      res[i].push_back(ind);
      --cnt;
      if (!cnt) return;
    }
  }
  while (cnt--) {
    vector<int> cur;
    cur.push_back(ind);
    for (int j = 0; j < res.size(); ++j) {
      if (res[j].size() == 2) continue;
      int ok = 0;
      for (int k = 0; k < res[j].size(); ++k) {
        if (res[j][k] != ind) {
          cur.push_back(res[j][k]);
          res[j].erase(res[j].begin() + k);
          ok = 1;
          break;
        }
      }
      if (ok) break;
    }
    res.push_back(cur);
  }
}
int check(int d) {
  for (int i = 0; i < res.size(); ++i) {
    res[i].clear();
  }
  res.clear();
  for (int i = 1; i <= n; ++i) {
    if (a[i].first < d) return 0;
  }
  for (int i = n; i > 0; --i) {
    addToAns(a[i].second, a[i].first - d);
  }
  for (int i = 0; i < res.size(); ++i) {
    if (res[i].size() < 2) return 0;
  }
  return 1;
}
int used[105];
void printans() {
  printf("%d\n", res.size());
  for (int i = 0; i < res.size(); ++i) {
    for (int j = 1; j <= n; ++j) {
      used[j] = 0;
    }
    for (int j = 0; j < res[i].size(); ++j) {
      used[res[i][j]] = 1;
    }
    for (int j = 1; j <= n; ++j) {
      printf("%d", used[j]);
    }
    printf("\n");
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i].first);
    a[i].second = i;
  }
  sort(a + 1, a + 1 + n);
  int ans = 0;
  for (int i = a[1].first; i > 0; --i) {
    if (check(i)) {
      ans = i;
      break;
    }
  }
  if (ans == 0) {
    printf("0\n");
    int cnt = 0;
    for (int i = 1; i <= n; ++i) cnt += a[i].first;
    printf("%d\n", cnt);
    for (int i = 1; i <= n; ++i) {
      int nxt = a[i].second + 1;
      if (nxt > n) nxt = 1;
      for (int j = 0; j < a[i].first; ++j) {
        for (int k = 1; k <= n; ++k) {
          if (k == a[i].second || k == nxt) {
            printf("1");
          } else
            printf("0");
        }
        printf("\n");
      }
    }
    return 0;
  }
  printf("%d\n", ans);
  printans();
  return 0;
}
