#include<iostream> #include<cstdio> #include<algorithm> #define N 3010 using namespace std; int n,m,f[N][N]; struct ma{int x,y;}a[N]; bool operator<(ma p,ma q){return p.x>q.x;} void get(int k) { sort(a+k,a+n+1); int w=a[k].x; for(int i=n;i>k;i--) { if(w>1) w-=2,f[a[k].y][a[i].y]=1; else if(!w) a[i].x-=2,f[a[i].y][a[k].y]=1; else w--,a[i].x--,f[a[k].y][a[i].y]=f[a[i].y][a[k].y]=2; } a[k].x=0; } int main() { cin>>n>>m; int x=0,sum=0; for(int i=1;i<=m;i++) { scanf("%d",&a[i].x); a[i].y=i; x+=2*(n-i); sum+=a[i].x; if(sum>x) return puts("no"),0; } for(int i=m+1;i<=n;i++) { a[i].y=i; x+=2*(n-i); a[i].x=min(a[i-1].x,x-sum); sum+=a[i].x; } if(sum!=x) return puts("no"),0; for(int i=1;i<n;i++) get(i); puts("yes"); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) putchar('X'); else if(!f[i][j]) putchar('L'); else if(f[i][j]==1) putchar('W'); else putchar('D'); } puts(""); } }