#include <bits/stdc++.h>
using namespace std;
const int N = 500 + 100;
const int M = 500 * 500 + 100;
int aa[M], bb[M];
int du[N];
int ans[N];
struct Edge {
  int v, next;
  Edge() {}
  Edge(int v, int next) : v(v), next(next) {}
} e[M * 2];
int head[N], total;
void init() {
  memset(head, -1, sizeof(head));
  total = 0;
}
void adde(int u, int v) {
  e[total] = Edge(v, head[u]);
  head[u] = total++;
}
int num = 0;
void dfs(int u, int f) {
  ans[u] = f;
  num++;
  for (int i = head[u]; i != -1; i = e[i].next) {
    int v = e[i].v;
    if (ans[v] == -1) {
      dfs(v, f);
    }
  }
}
int main() {
  int n, m;
  while (scanf("%d%d", &n, &m) != EOF) {
    init();
    memset(du, 0, sizeof(du));
    for (int i = 0; i < m; i++) {
      scanf("%d%d", &aa[i], &bb[i]);
      du[aa[i]]++;
      du[bb[i]]++;
      adde(aa[i], bb[i]);
      adde(bb[i], aa[i]);
    }
    if (n == 1) {
      printf("Yes\n");
      printf("a\n");
      continue;
    }
    memset(ans, -1, sizeof(ans));
    int nb = 0;
    for (int i = 1; i <= n; i++) {
      if (du[i] == n - 1) {
        ans[i] = 0;
        nb++;
      }
    }
    int flag = 1, flag2 = 1;
    for (int i = 1; i <= n; i++) {
      if (ans[i] == -1) {
        num = 0;
        dfs(i, flag);
        for (int j = 1; j <= n; j++) {
          if (ans[j] == flag && du[j] != num - 1 + nb) {
            flag2 = 0;
          }
        }
        flag++;
      }
    }
    if (flag > 3 || flag2 == 0) {
      printf("No\n");
      continue;
    }
    printf("Yes\n");
    for (int i = 1; i <= n; i++) {
      if (ans[i] == 0)
        printf("%c", 'b');
      else if (ans[i] == 1) {
        printf("%c", 'a');
      } else
        printf("%c", 'c');
    }
    printf("\n");
  }
  return 0;
}
