#include <bits/stdc++.h>
using namespace std;
void getint(int &v) {
  char ch, fu = 0;
  for (ch = '*'; (ch < '0' || ch > '9') && ch != '-'; ch = getchar())
    ;
  if (ch == '-') fu = 1, ch = getchar();
  for (v = 0; ch >= '0' && ch <= '9'; ch = getchar()) v = v * 10 + ch - '0';
  if (fu) v = -v;
}
int n, m, tt, tot, g[5555], p[5555];
char ans[3010][3010];
bool cmp(int x, int y) { return g[x] > g[y]; }
int main() {
  cin >> n >> m;
  tot = n * (n - 1);
  for (int i = 1; i <= m; i++) {
    cin >> g[i];
  }
  tt = tot;
  for (int i = 1; i <= m; i++) tt -= g[i];
  if (m < n) {
    int re = tt % (n - m);
    int le = tt / (n - m);
    for (int i = m + 1; i <= n; ++i) {
      if (i - m <= re)
        g[i] = le + 1;
      else
        g[i] = le;
    }
  }
  for (int i = 2; i <= n; i++)
    if (g[i] > g[i - 1]) return puts("no"), 0;
  int s = 0;
  for (int i = n; i >= 1; i--) {
    s += g[i];
    if (s < (n - i + 1) * (n - i)) return puts("no"), 0;
  }
  if (s != n * (n - 1)) return puts("no"), 0;
  puts("yes");
  for (int i = 1; i <= n; i++) p[i] = i;
  for (int i = 1; i <= n - 1; i++) {
    sort(p + i + 1, p + n + 1, cmp);
    int l = 2 * (n - i) - g[p[i]];
    for (int j = i + 1; j <= n; j++)
      if (g[p[j]] >= min(2, l) && min(2, l) == 2) {
        g[p[j]] -= min(2, l);
        l -= min(2, l);
        ans[p[i]][p[j]] = 'L';
        ans[p[j]][p[i]] = 'W';
      } else if (g[p[j]] >= min(1, l) && min(1, l) == 1) {
        g[p[j]] -= min(1, l);
        l -= min(1, l);
        ans[p[i]][p[j]] = 'D';
        ans[p[j]][p[i]] = 'D';
      } else {
        ans[p[i]][p[j]] = 'W';
        ans[p[j]][p[i]] = 'L';
      }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++)
      if (i == j)
        putchar('X');
      else
        putchar(ans[i][j]);
    puts("");
  }
  return 0;
}
