#include <bits/stdc++.h>
using namespace std;
const int maxn = 40;
const int n = 61;
const int J = n * (n - 1) / 2;
int N, M;
int w[maxn], V[n + 9][n + 9];
int dp[maxn][n + 9][n * n + 9];
int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    scanf("%d", w + i);
  }
  sort(w, w + N);
  memset(dp, 0, sizeof dp);
  for (int i = 1; i <= n; i++) {
    dp[0][i][w[0] * i] = i;
  }
  for (int i = 1; i < N; i++) {
    for (int j = i; j <= n; j++) {
      for (int k = j * (j - 1) / 2; k <= J; k++) {
        if (dp[i - 1][j][k] == 0) {
          continue;
        }
        for (int t = 1; t + j <= n; t++) {
          dp[i][j + t][k + t * w[i]] = t;
        }
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    if (dp[N - 1][i][i * (i - 1) / 2]) {
      cout << i << endl;
      vector<pair<int, int>> ans;
      for (int a = N - 1, b = i, c = b * (b - 1) / 2, t; a >= 0;
           t = dp[a][b][c], c -= t * w[a], b -= dp[a][b][c + t * w[a]], a--) {
        for (int t = b - dp[a][b][c]; t < b; t++) {
          ans.push_back(make_pair(t, w[a]));
        }
      }
      memset(V, 0, sizeof V);
      for (int j = i - 1; j >= 0; j--) {
        vector<pair<int, int>> E(ans);
        sort(E.begin(), E.end(),
             [](const pair<int, int> &l, const pair<int, int> &r) {
               return l.second > r.second;
             });
        for (int k = 1; k <= E[j].second; k++) {
          V[E[j].first][E[j - k].first] = 1;
        }
        for (int k = 0; k < j - E[j].second; k++) {
          E[k].second--;
          V[E[k].first][E[j].first] = 1;
        }
        (ans = E).pop_back();
      }
      for (int j = 0; j < i; j++) {
        for (int k = 0; k < i; k++) {
          printf("%d", V[j][k]);
        }
        puts("");
      }
      return 0;
    }
  }
  puts("=(");
  return 0;
}
