#include <bits/stdc++.h>
using namespace std;
const int MaxN = 3005;
int n, m, sum;
pair<int, int> a[MaxN];
int ans[MaxN][MaxN];
struct NoSolution {
  NoSolution() {
    cout << "no" << endl;
    exit(0);
  }
};
void Init() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= m; ++i) {
    cin >> a[i].first;
    sum += a[i].first;
    a[i].second = i;
  }
}
void Main() {
  sum = n * (n - 1) - sum;
  for (int i = m + 1; i <= n; ++i) {
    a[i] = make_pair(sum / (n - m) + ((n - i) % (n - m) < sum % (n - m)), i);
    if (a[i].first > a[m].first) throw NoSolution();
  }
  for (int i = 1; i <= n; ++i) {
    sort(a + 1, a + n - i + 2);
    int best = a[n - i + 1].first / 2;
    if (best >= n - i + 1) throw NoSolution();
    for (int j = 1; j <= best; ++j) {
      ans[a[n - i + 1].second][a[j].second] = 1;
      ans[a[j].second][a[n - i + 1].second] = -1;
    }
    if (a[n - i + 1].first & 1) {
      if (++best >= n - i + 1) throw NoSolution();
      ans[a[n - i + 1].second][a[best].second] =
          ans[a[best].second][a[n - i + 1].second] = 0;
      a[best].first--;
    }
    for (int j = best + 1; j < n - i + 1; ++j) {
      if (a[j].first < 2) throw NoSolution();
      a[j].first -= 2;
      ans[a[n - i + 1].second][a[j].second] = -1;
      ans[a[j].second][a[n - i + 1].second] = 1;
    }
  }
  cout << "yes" << endl;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      if (i == j)
        cout.put('X');
      else if (ans[i][j] == 1)
        cout.put('W');
      else if (ans[i][j] == -1)
        cout.put('L');
      else
        cout.put('D');
    }
    cout << endl;
  }
  return;
}
int main() {
  Init();
  Main();
  return 0;
}
