#include <bits/stdc++.h>
using namespace std;
const int MAXN = 509;
vector<int> nbr[MAXN];
bool nbrMatr[MAXN][MAXN];
char letter[MAXN];
char rev(char c) { return c == 'a' ? 'c' : 'a'; }
bool dfs(int u, char let) {
  letter[u] = let;
  bool isBad = false;
  for (int v : nbr[u]) {
    if (letter[v] == let) {
      return true;
    }
    if (!letter[v]) {
      isBad = isBad || dfs(v, rev(let));
    }
  }
  return isBad;
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (j != i) nbrMatr[i][j] = true;
    }
  }
  while (m--) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--;
    v--;
    nbrMatr[u][v] = nbrMatr[v][u] = false;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (nbrMatr[i][j]) {
        nbr[i].push_back(j);
      }
    }
  }
  bool dfsDone = false;
  for (int i = 0; i < n; i++) {
    if (!letter[i] && !nbr[i].empty()) {
      if (dfsDone) {
        printf("No\n");
        return 0;
      } else {
        dfsDone = true;
        if (dfs(i, 'a')) {
          printf("No\n");
          return 0;
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i != j && !nbrMatr[i][j] && letter[i] && letter[j] &&
          letter[i] == rev(letter[j])) {
        printf("No\n");
        return 0;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    if (!letter[i]) letter[i] = 'b';
  }
  printf("Yes\n");
  printf("%s\n", letter);
  return 0;
}
