#include <bits/stdc++.h>
using namespace std;
int adj[501][501];
int main() {
  int n, m;
  vector<pair<int, int> > vp;
  cin >> n >> m;
  memset(adj, 0, sizeof(adj));
  for (long long int i = 0; i < m; ++i) {
    int x, y;
    cin >> x >> y;
    adj[x][y] = adj[y][x] = 1;
    vp.push_back({min(x, y), max(x, y)});
  }
  sort(vp.begin(), vp.end());
  vector<int> taken(n + 1, 0);
  taken[1] = 1;
  for (int i = 1; i <= n; ++i) {
    if (!taken[i]) {
      bool lele = true;
      for (int j = 1; j <= n; ++j) {
        if (taken[j] && !adj[i][j]) lele = false;
      }
      if (lele) taken[i] = 1;
    }
  }
  for (int i = 1; i <= n; ++i) {
    if (!taken[i]) taken[i] = 3;
  }
  for (int i = 1; i <= n; ++i) {
    if (taken[i] == 3) {
      for (int j = 1; j <= n; ++j) {
        if (adj[i][j] && taken[j] != 3) taken[j] = 2;
      }
    }
  }
  vector<pair<int, int> > ans;
  for (int i = 1; i <= n; ++i) {
    for (int j = i + 1; j <= n; ++j) {
      if (abs(taken[i] - taken[j]) <= 1) ans.push_back({i, j});
    }
  }
  if (vp == ans) {
    cout << "Yes" << endl;
    for (int i = 1; i <= n; ++i) {
      cout << (char)('a' + taken[i] - 1);
    }
    cout << endl;
  } else
    cout << "No" << endl;
}
