#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1000;
const int LMAX = 1000;
list<int> lst[LMAX + 1];
int L;
char path[LMAX + 1];
char ans[NMAX][LMAX + 1];
void dfs(int dep) {
  int i;
  if (!lst[dep].empty()) {
    i = lst[dep].back();
    lst[dep].pop_back();
    path[dep] = '\0';
    strcpy(ans[i], path);
    if (dep == L)
      while (L != 0 && lst[L].empty()) L--;
    return;
  }
  path[dep] = '0';
  dfs(dep + 1);
  if (L > dep) {
    path[dep] = '1';
    dfs(dep + 1);
  }
}
bool solve() {
  dfs(0);
  return L == 0;
}
int main() {
  int n, i, j;
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%d", &j);
    lst[j].push_back(i);
    if (j > L) L = j;
  }
  if (solve()) {
    puts("YES");
    for (i = 0; i < n; i++) puts(ans[i]);
  } else {
    puts("NO");
  }
  return 0;
}
