#include <bits/stdc++.h>
using namespace std;
string next(string str) {
  int ok = 0;
  for (int i = str.size() - 1; i >= 0; i--) {
    if (str[i] == '0') {
      ok = 1;
      str[i] = '1';
      for (int j = i + 1; j < str.size(); j++) str[j] = '0';
      break;
    }
  }
  if (!ok) return "";
  return str;
}
int mark[2000];
int main() {
  int n;
  cin >> n;
  vector<int> lenV, tempV;
  for (int i = 0; i < n; i++) {
    int v;
    cin >> v;
    lenV.push_back(v);
  }
  vector<string> res;
  tempV = lenV;
  sort(lenV.begin(), lenV.end());
  string prev = "";
  for (int i = 0; i < lenV[0]; i++) prev += "0";
  res.push_back(prev);
  for (int i = 1; i < n; i++) {
    int len = lenV[i];
    if (len == prev.size()) {
      string cur = next(prev);
      if (cur.size() == 0) break;
      prev = cur;
    } else {
      string cur = next(prev);
      if (cur.size() == 0) break;
      int upto = len - (cur.size());
      for (int j = 0; j < upto; j++) cur += "0";
      prev = cur;
    }
    res.push_back(prev);
  }
  if (res.size() != n) {
    cout << "NO" << endl;
  } else {
    cout << "YES" << endl;
    for (int i = 0; i < tempV.size(); i++) {
      string str = "";
      for (int j = 0; j < res.size(); j++) {
        if (mark[j]) continue;
        if (res[j].size() == tempV[i]) {
          str = res[j];
          mark[j] = 1;
          break;
        }
      }
      cout << str << endl;
    }
  }
  return 0;
}
