#include <bits/stdc++.h>
using namespace std;
const int MAXN = 555;
vector<int> graf[MAXN];
int n, m;
int color[MAXN];
int br;
void load() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    graf[a].push_back(b);
    graf[b].push_back(a);
  }
  for (int i = 0; i < n; i++) color[i] = -1;
  for (int i = 0; i < n; i++) {
    if ((int)graf[i].size() == n - 1) {
      color[i] = 0;
      br++;
    }
  }
}
bool bl;
void dfs(int x, int boj) {
  color[x] = boj;
  for (int i = 0; i < (int)graf[x].size(); i++) {
    int sus = graf[x][i];
    if (color[sus] == -1) dfs(sus, boj);
  }
}
bool solve() {
  int komp = 0;
  for (int i = 0; i < n; i++) {
    if (color[i] == -1) {
      if (komp == 2) return false;
      komp++;
      dfs(i, komp);
    }
  }
  int br1 = 0, br2 = 0, br0 = 0;
  for (int i = 0; i < n; i++) {
    if (color[i] == 0) br0++;
    if (color[i] == 1) br1++;
    if (color[i] == 2) br2++;
  }
  for (int i = 0; i < n; i++) {
    if (color[i] == 0) continue;
    if (color[i] == 1) {
      if ((int)graf[i].size() != br0 + br1 - 1) return false;
    }
    if (color[i] == 2) {
      if ((int)graf[i].size() != br0 + br2 - 1) return false;
    }
  }
  printf("Yes\n");
  for (int i = 0; i < n; i++) {
    if (color[i] == 0)
      printf("b");
    else if (color[i] == 1)
      printf("a");
    else
      printf("c");
  }
  printf("\n");
  return true;
}
int main() {
  load();
  if (!solve()) printf("No\n");
  return 0;
}
