#include <bits/stdc++.h>
using namespace std;
inline void read(int &x) {
  int f = 1;
  x = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  x *= f;
}
int scc[1005], dfn[1005], low[1005], stac[1005], vis[1005], times, tot, sccnum;
int h[1005], in[1005], head = 1, f[1005][1005], ans[1005], n, m;
struct yyy {
  int to, z;
  inline void add(int x, int y) {
    to = y;
    z = h[x];
    h[x] = head;
  }
} a[1005 * 1005 * 2];
inline void tarjan(int x) {
  register int i;
  dfn[x] = low[x] = ++times;
  stac[++tot] = x;
  vis[x] = 1;
  for (i = h[x]; i; i = a[i].z)
    if (!dfn[a[i].to])
      tarjan(a[i].to), low[x] = min(low[x], low[a[i].to]);
    else if (vis[a[i].to])
      low[x] = min(low[x], dfn[a[i].to]);
  if (low[x] == dfn[x]) {
    ++sccnum;
    while (1) {
      vis[stac[tot]] = 0;
      scc[stac[tot]] = sccnum;
      if (stac[tot--] == x) return;
    }
  }
}
signed main() {
  register int i, j, x, y;
  read(n);
  read(m);
  for (i = 1; i <= m; i++) {
    read(x);
    read(y);
    in[x]++;
    in[y]++;
    f[x][y] = f[y][x] = 1;
  }
  for (i = 1; i <= n; i++) {
    if (in[i] == n - 1) continue;
    for (j = 1; j <= n; j++)
      if (in[j] < n - 1 && i != j) {
        if (f[i][j])
          a[++head].add(i, j), a[++head].add(i + n, j + n);
        else
          a[++head].add(i, j + n), a[++head].add(i + n, j);
      }
  }
  for (i = 1; i <= 2 * n; i++)
    if (!dfn[i]) tarjan(i);
  for (i = 1; i <= n; i++)
    if (in[i] < n - 1 && scc[i] == scc[i + n]) return puts("No"), 0;
  for (puts("Yes"), i = 1; i <= n; i++)
    if (in[i] == n - 1)
      putchar('b');
    else
      putchar(scc[i] < scc[i + n] ? 'a' : 'c');
  return 0;
}
