#include <bits/stdc++.h>
using namespace std;
template <class T, class S>
ostream& operator<<(ostream& os, const pair<T, S>& v) {
  return os << "(" << v.first << ", " << v.second << ")";
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  os << "[";
  for (int i = int(0); i <= int((static_cast<int>((v).size())) - 1); ++i) {
    if (i) os << ", ";
    os << v[i];
  }
  return os << "]";
}
template <class T>
bool setmax(T& _a, T _b) {
  if (_b > _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
bool setmin(T& _a, T _b) {
  if (_b < _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
T gcd(T _a, T _b) {
  return _b == 0 ? _a : gcd(_b, _a % _b);
}
bool check(vector<int> a) {
  const int n = static_cast<int>((a).size());
  int sa = 0, sb = 0, b = n - 1;
  for (int i = int(0); i <= int((n)-1); ++i) {
    sa += a[i];
    sb += b;
    b -= 2;
    if (sa > sb) return false;
  }
  return true;
}
void process(vector<int> a) {
  const int n = static_cast<int>((a).size());
  vector<string> ans(n, string(n, 'X'));
  vector<pair<int, int> > b;
  for (int i = int(0); i <= int((n)-1); ++i) b.push_back(make_pair(a[i], i));
  while (!b.empty()) {
    sort((b).begin(), (b).end());
    pair<int, int> cur = b.back();
    b.pop_back();
    assert(cur.first <= static_cast<int>((b).size()));
    for (int i = int(0); i <= int((cur.first) - 1); ++i) {
      ans[cur.second][b[i].second] = 'W';
      ans[b[i].second][cur.second] = 'L';
      ++b[i].first;
    }
    for (int i = int(cur.first); i <= int((static_cast<int>((b).size())) - 1);
         ++i) {
      ans[cur.second][b[i].second] = 'D';
      ans[b[i].second][cur.second] = 'D';
    }
  }
  cout << "yes" << endl;
  for (int i = int(0); i <= int((n)-1); ++i) cout << ans[i] << endl;
}
bool solve() {
  int n, m;
  cin >> n >> m;
  vector<int> a(n);
  int rest = 0;
  for (int i = int(0); i <= int((m)-1); ++i) {
    cin >> a[i];
    a[i] -= n - 1;
    rest -= a[i];
  }
  if (m < n) {
    int v = rest / (n - m), c = rest - v * (n - m);
    if (c < 0) --v, c += n - m;
    for (int i = int(m); i <= int((n)-1); ++i) {
      a[i] = v;
      if (i < m + c) ++a[i];
    }
    if (a[m - 1] < a[m]) return false;
  } else {
    if (rest != 0) return false;
  }
  if (!check(a)) return false;
  process(a);
  return true;
}
int main() {
  if (!solve()) cout << "no" << endl;
  return 0;
}
