#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3005;
int flow[MAXN][MAXN], cap[MAXN][MAXN], tab[MAXN], d[MAXN], ptr[MAXN], q[MAXN];
bool bfs(int n, int s, int t) {
  int qh = 0, qt = 0;
  q[qt++] = s;
  fill(d, d + n, -1);
  d[s] = 0;
  while (qh < qt) {
    int v = q[qh++];
    for (int to = 0; to < n; ++to)
      if (d[to] == -1 && flow[v][to] < cap[v][to]) {
        q[qt++] = to;
        d[to] = d[v] + 1;
      }
  }
  return d[t] != -1;
}
int dfs(int n, int v, int t, int f) {
  if (f == 0 || v == t) return f;
  for (int& to = ptr[v]; to < n; ++to) {
    if (d[to] != d[v] + 1) continue;
    int pushed = dfs(n, to, t, min(f, cap[v][to] - flow[v][to]));
    if (pushed) {
      flow[v][to] += pushed;
      flow[to][v] -= pushed;
      return pushed;
    }
  }
  return 0;
}
int dinic(int n, int s, int t) {
  int flow = 0;
  for (;;) {
    if (!bfs(n, s, t)) break;
    fill(ptr, ptr + n, 0);
    while (int pushed = dfs(n, s, t, INT_MAX)) flow += pushed;
  }
  return flow;
}
void check(int m) {
  char wyn[m][m];
  int x = dinic(m + 2, m, m + 1);
  for (int i = 0; i < m; i++) {
    wyn[i][i] = 'X';
    for (int j = i + 1; j < m; j++) {
      if (flow[i][j] == 1)
        wyn[i][j] = 'D', wyn[j][i] = 'D';
      else if (flow[i][j] == 2)
        wyn[i][j] = 'L', wyn[j][i] = 'W';
      else
        wyn[i][j] = 'W', wyn[j][i] = 'L';
    }
  }
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < m; j++) printf("%c", wyn[i][j]);
    printf("\n");
  }
}
void init(int n, int m) {
  int sum1 = 0, sum2 = 0;
  for (int i = 0; i < n; i++) {
    sum1 += tab[i];
    sum2 += 2 * (m - 1 - i);
    if (sum1 > sum2) {
      printf("no");
      return;
    }
  }
  for (int i = n; i < m; i++) {
    sum2 += 2 * (m - 1 - i);
    tab[i] = min(tab[i - 1], sum2 - sum1);
    sum1 += tab[i];
  }
  if (sum1 != m * (m - 1)) {
    printf("no");
    return;
  }
  for (int i = 0; i < m; i++) {
    int ile = tab[i] - (2 * (m - 1 - i));
    ile < 0 ? cap[m][i] = -ile : cap[i][m + 1] = ile;
  }
  for (int i = 0; i < m; i++)
    for (int j = i + 1; j < m; j++) cap[i][j] = 2;
  printf("yes\n");
  check(m);
}
int main() {
  int a, n, m;
  scanf("%d %d", &m, &n);
  for (int i = 0; i < n; i++) scanf("%d", &tab[i]);
  init(n, m);
}
