#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
const int INF = 0x3fffffff;
int main() {
  int N, M;
  bool edge[505][505] = {};
  char ans[505] = {};
  cin >> N >> M;
  for (int i = 0; i < (M); i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    edge[u][v] = true;
    edge[v][u] = true;
  }
  for (int i = 0; i < (N); i++) edge[i][i] = true;
  bool correct = true, first_a = true;
  bool checked[505] = {};
  int count = 0, bf = -1;
  while (count < N) {
    if (count == bf) first_a = true;
    bf = count;
    for (int i = 0; i < (N); i++) {
      bool f = true;
      if (checked[i]) continue;
      for (int j = 0; j < (N); j++) {
        if (!edge[i][j]) {
          f = false;
          if (ans[i] != 0) {
            if (ans[i] == 'a') ans[j] = 'c';
            if (ans[i] == 'c') ans[j] = 'a';
            if (ans[i] == 'b') correct = false;
            checked[i] = true;
          } else if (first_a) {
            ans[i] = 'a';
            ans[j] = 'c';
            first_a = false;
            checked[i] = true;
          } else {
            break;
          }
        }
      }
      if (f) {
        ans[i] = 'b';
        checked[i] = true;
      }
      if (checked[i]) count++;
    }
  }
  for (int i = 0; i < (N); i++)
    for (int j = 0; j < (N); j++) {
      if ((edge[i][j] && abs(ans[i] - ans[j]) == 2) ||
          (!edge[i][j] && abs(ans[i] - ans[j]) < 2)) {
        correct = false;
      }
    }
  if (correct) {
    cout << "Yes" << endl;
    for (int i = 0; i < (N); i++) cout << ans[i];
    cout << endl;
  } else {
    cout << "No" << endl;
  }
  return 0;
}
