#include <bits/stdc++.h>
const int N = 1 << 9;
bool isbipartite;
int n, m, color[N], indeg[N], graph[N][N];
void coloring(int x, int c) {
  color[x] = c;
  for (int i = 1; isbipartite && i <= n; i++)
    if (graph[x][i]) {
      if (color[i] == c)
        isbipartite = false;
      else if (color[i] == -1)
        coloring(i, 1 - c);
    }
}
int main() {
  scanf("%d %d", &n, &m);
  memset(color, -1, sizeof color);
  memset(indeg, 0, sizeof indeg);
  memset(graph, 1, sizeof graph);
  for (int i = 0, u, v; i < m; i++) {
    scanf("%d %d", &u, &v);
    graph[u][v] = graph[v][u] = 0;
    indeg[u]++;
    indeg[v]++;
  }
  for (int i = 1; i <= n; i++) {
    graph[i][i] = 0;
    if (indeg[i] == n - 1) color[i] = 2;
  }
  isbipartite = true;
  for (int i = 1; i <= n; i++) {
    if (color[i] == -1) coloring(i, 0);
  }
  if (!isbipartite)
    printf("No\n");
  else {
    for (int i = 1; i <= n; i++) {
      for (int j = i + 1; j <= n; j++)
        if (!graph[i][j]) {
          if (color[i] == 0 && color[j] == 1) isbipartite = false;
        }
    }
    if (!isbipartite)
      printf("No\n");
    else {
      printf("Yes\n");
      char s[3] = {'a', 'c', 'b'};
      for (int i = 1; i <= n; i++) printf("%c", s[color[i]]);
      printf("\n");
    }
  }
  return 0;
}
