#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 10;
const int maxlen = 1e6 + 10;
int n, ns;
pair<int, int> a[maxn];
int trie[maxlen][2], tot;
bool vis[maxlen];
char s[maxn][maxn];
void init() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i].first), a[i].second = i;
}
int q[maxn];
bool insert(int len, int id) {
  if (vis[0]) return false;
  int now = 0;
  q[0] = 0;
  for (int i = 1; i <= len; i++) {
    if (!trie[now][0]) trie[now][0] = ++tot;
    if (!vis[trie[now][0]]) {
      now = trie[now][0];
      s[id][i - 1] = '0';
    } else {
      if (!trie[now][1]) trie[now][1] = ++tot;
      now = trie[now][1];
      s[id][i - 1] = '1';
    }
    q[i] = now;
  }
  s[id][len] = 0;
  vis[now] = true;
  for (int i = len - 1; i >= 0; i--) {
    now = q[i];
    if (trie[now][1] && vis[trie[now][1]]) vis[now] = true;
  }
  return true;
}
void doit() {
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++) {
    if (!insert(a[i].first, a[i].second)) {
      printf("NO\n");
      return;
    }
  }
  printf("YES\n");
  for (int i = 1; i <= n; i++) printf("%s\n", s[i]);
}
int main() {
  init();
  doit();
  return 0;
}
