#include <bits/stdc++.h>
using namespace std;
int n, x, L[1005 * 1005], R[1005 * 1005], v[1005], cnt = 1, ord[1005];
string sol[1005], act;
bool uz[1005 * 1005];
bool add(int nod, int lg, int sl) {
  if (!lg) {
    uz[nod] = 1;
    sol[sl] = act;
    return 1;
  }
  if (!L[nod]) {
    L[nod] = (++cnt);
    R[nod] = (++cnt);
  }
  if (uz[L[nod]] && uz[R[nod]]) {
    uz[nod] = 1;
    return 0;
  }
  if (!uz[L[nod]]) {
    act += "0";
    if (add(L[nod], lg - 1, sl)) {
      act.pop_back();
      return 1;
    }
    act.pop_back();
  }
  if (!uz[R[nod]]) {
    act += "1";
    if (add(R[nod], lg - 1, sl)) {
      act.pop_back();
      return 1;
    }
    act.pop_back();
  }
  uz[nod] = 1;
  return 0;
}
bool Comp(int x, int y) { return v[x] < v[y]; }
int main() {
  int i;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &v[i]);
    ord[i] = i;
  }
  sort(ord + 1, ord + n + 1, Comp);
  for (i = 1; i <= n; i++) {
    if (!add(1, v[ord[i]], ord[i])) {
      printf("NO\n");
      return 0;
    }
  }
  printf("YES\n");
  for (i = 1; i <= n; i++) cout << sol[i] << '\n';
  return 0;
}
