#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
const int MAX = 2000;
const int MAXC = 10000;
const int MAXV = 20 * 20;
const int BASE = 1000000007;
const int MOD = 1000000007;
int add;
int n, m;
int a[3007], b[3007];
string Q[3007];
bool used[3007];
int main() {
  cin >> n >> m;
  for (int i = (0); i < (m); i++) cin >> a[i];
  int M = 2 * (n - 1), SM = 0, S = 0, P = 0;
  for (int i = (0); i < (m); i++) {
    S += a[i];
    P += M - a[i];
    SM += M;
    M -= 2;
    if (S > SM) {
      cout << "no";
      return 0;
    }
    if (i != n - 1 && a[i] < (P + (n - i - 2) * (n - i - 1)) / (n - i - 1)) {
      cout << "no";
      return 0;
    }
  }
  P += (n - m) * (n - m - 1);
  cout << "yes\n";
  for (int i = (m); i < (n); i++) {
    a[i] = P / (n - m);
    if (i - m < P % (n - m)) a[i]++;
  }
  for (int i = (0); i < (n); i++) b[i] = a[i];
  for (int i = (0); i < (n); i++)
    for (int j = (0); j < (n); j++) Q[i] += '.';
  for (int i = (0); i < (n); i++) Q[i][i] = 'X';
  for (int i = (0); i < (n); i++) {
    int val = -1, pos = -1;
    for (int i = (0); i < (n); i++)
      if (!used[i] && a[i] > val) {
        val = a[i];
        pos = i;
      }
    used[pos] = true;
    vector<pair<int, int> > W;
    for (int i = (0); i < (n); i++)
      if (!used[i]) W.push_back(make_pair(a[i], i));
    sort(W.begin(), W.end());
    for (int i = (0); i < (W.size()); i++) {
      if (a[pos] >= 2) {
        a[pos] -= 2;
        Q[pos][W[i].second] = 'W';
        Q[W[i].second][pos] = 'L';
      } else if (a[pos] >= 1) {
        a[pos]--;
        a[W[i].second]--;
        Q[pos][W[i].second] = 'D';
        Q[W[i].second][pos] = 'D';
      } else {
        a[W[i].second] -= 2;
        Q[pos][W[i].second] = 'L';
        Q[W[i].second][pos] = 'W';
      }
    }
  }
  for (int i = (0); i < (n); i++) cout << Q[i] << endl;
  return 0;
}
