#include <bits/stdc++.h>
using namespace std;
char gchar() {
  static char tbuf1[1000], *tmp_st = tbuf1, *tmp_ed = tbuf1;
  if (tmp_st == tmp_ed) {
    int len = fread(tbuf1, 1, 1000, stdin);
    if (len == 0) return -1;
    tmp_ed = tbuf1 + len;
    tmp_st = tbuf1;
  }
  return *(tmp_st++);
}
inline bool gn(int& x) {
  char c, sg = 0;
  while (c = gchar(), (c > '9' || c < '0') && c != '-' && ~c)
    ;
  if (c == -1) return 0;
  for ((c == '-' ? sg = 1, c = gchar() : 0), x = 0; c >= '0' && c <= '9';
       c = gchar())
    x = (x << 1) + (x << 3) + c - '0';
  if (sg) x = -x;
  return 1;
}
pair<int, int> p[3001];
int sum[3001];
char ans[3001][3001];
inline void replace(int u, int v, int c) {
  p[u].first -= c, p[v].first -= 2 - c;
  int a = p[u].second, b = p[v].second;
  if (c == 2)
    ans[a][b] = 'W', ans[b][a] = 'L';
  else if (c == 1)
    ans[a][b] = ans[b][a] = 'D';
  else
    ans[a][b] = 'L', ans[b][a] = 'W';
}
int main() {
  int n, m;
  gn(n), gn(m);
  for (int i = 1; i <= n; i++) {
    p[i].second = i;
    ans[i][i] = 'X';
    sum[i] = sum[i - 1] + (n - i << 1);
  }
  int first = 0;
  for (int i = 1; i <= m; i++) {
    gn(p[i].first);
    first += p[i].first;
    if (first > sum[i]) return puts("no");
  }
  if (sum[n] > first + p[m].first * (n - m)) return puts("no");
  for (int i = m + 1; i <= n; i++) {
    p[i].first = (sum[n] - first + n - i) / (n - i + 1);
    first += p[i].first;
  }
  for (int i = 1; i <= n; i++) {
    sort(p + i, p + n + 1,
         [](pair<int, int> a, pair<int, int> b) { return a.first > b.first; });
    for (int j = i + 1; j <= n; j++) {
      if (p[i].first == n - j + 1 << 1)
        replace(i, j, 2);
      else
        replace(i, j, 1);
    }
  }
  puts("yes");
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) putchar(ans[i][j]);
    puts("");
  }
}
