#include <bits/stdc++.h>
using namespace std;
struct E {
  int v, next;
} e[610 * 610];
int T, n, m, num, head[610], a[610][610], b[610], du[610];
bool vis[610], ff;
void add(int u, int v) { e[++num].v = v, e[num].next = head[u], head[u] = num; }
void dfs(int x) {
  if (ff == 0) return;
  for (int i = head[x]; i; i = e[i].next) {
    int v = e[i].v;
    if (b[v]) {
      if (b[v] == b[x]) {
        ff = 0;
        return;
      }
      continue;
    }
    vis[v] = 1;
    if (b[x] == 1)
      b[v] = 2;
    else if (b[x] == 2)
      b[v] = 1;
    dfs(v);
  }
}
int main() {
  int x, y;
  scanf("%d%d", &n, &m);
  num = 0;
  memset(head, 0, sizeof(head));
  memset(a, 0, sizeof(a));
  memset(du, 0, sizeof(du));
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    a[x][y] = a[y][x] = 1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (a[i][j] || i == j) continue;
      add(i, j), du[i]++;
    }
  }
  memset(b, 0, sizeof(b));
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; i++) {
    if (vis[i] || du[i] == 0) continue;
    vis[i] = 1, b[i] = 1;
    ff = 1;
    dfs(i);
    if (ff == 0) {
      printf("No\n");
      return 0;
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i == j) continue;
      if (a[i][j]) {
        if (b[i] == 0 || b[j] == 0) continue;
        if (b[i] != b[j]) {
          printf("No\n");
          return 0;
        }
      }
    }
  }
  printf("Yes\n");
  for (int i = 1; i <= n; i++) {
    if (b[i] == 0)
      printf("b");
    else if (b[i] == 1)
      printf("a");
    else if (b[i] == 2)
      printf("c");
  }
  printf("\n");
  return 0;
}
