#include <bits/stdc++.h>
using namespace std;
vector<int> G[505];
int alpha[505] = {0};
int n, m, i, j, k;
int na = 0, nb = 0, nc = 0;
bool checkvertex(int v) {
  if (alpha[v] == 2) return true;
  int nA = 0, nB = 0, nC = 0;
  if (alpha[v] == 3) {
    for (i = 0; i < G[v].size(); i++) {
      int u = G[v][i];
      if (alpha[u] == 1) return false;
      if (alpha[u] == 3) nC++;
      if (alpha[u] == 2) nB++;
    }
    return (nC == nc - 1 && nB == nb);
  }
  if (alpha[v] == 1) {
    for (i = 0; i < G[v].size(); i++) {
      int u = G[v][i];
      if (alpha[u] == 3) return false;
      if (alpha[u] == 1) nA++;
      if (alpha[u] == 2) nB++;
    }
    return (nA == na - 1 && nB == nb);
  }
}
bool checkgraph() {
  for (int i = 1; i <= n; i++) {
    if (!checkvertex(i)) return false;
  }
  return true;
}
int main() {
  cin >> n >> m;
  for (i = 0; i < m; i++) {
    cin >> j >> k;
    G[j].push_back(k);
    G[k].push_back(j);
  }
  for (i = 1; i <= n; i++) {
    if (G[i].size() == (n - 1)) nb++, alpha[i] = 2;
  }
  for (i = 1; i <= n; i++) {
    if (!alpha[i]) {
      na++;
      alpha[i] = 1;
      for (j = 0; j < G[i].size(); j++) {
        int v = G[i][j];
        if (!alpha[v]) {
          alpha[v] = 1;
          na++;
        }
      }
      break;
    }
  }
  for (i = 1; i <= n; i++) {
    if (!alpha[i]) {
      alpha[i] = 3;
      nc++;
    }
  }
  if (checkgraph()) {
    printf("Yes\n");
    for (i = 1; i <= n; i++) {
      if (alpha[i] == 1) printf("a");
      if (alpha[i] == 2) printf("b");
      if (alpha[i] == 3) printf("c");
    }
  } else {
    printf("No\n");
  }
  return 0;
}
