#include <bits/stdc++.h>
using namespace std;
struct Node {
  Node() : vis(0), comp(-1) {}
  int vis;
  int comp;
  vector<int> adj;
};
vector<int> vis;
bool dfs(vector<vector<int> >& a, int u, string& res) {
  vis[u] = true;
  for (int i = 0; i < a.size(); i++) {
    if (i == u) continue;
    if (vis[i] == false) {
      if (a[u][i] == 0) {
        if (res[u] == 'b') res[u] = 'a';
        res[i] = (res[u] == 'a') ? 'c' : 'a';
        if (!dfs(a, i, res)) return false;
      }
    } else {
      if (a[u][i] == 0) {
        if (res[u] == res[i]) return false;
      }
    }
  }
  return true;
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  vector<vector<int> > a(n, vector<int>(n));
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    a[u][v] = 1;
    a[v][u] = 1;
  }
  string res(n, 'b');
  vis.assign(n, false);
  for (int i = 0; i < n; i++) {
    if (vis[i] == false) {
      if (!dfs(a, i, res)) {
        cout << "No" << endl;
        return 0;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (abs(res[i] - res[j]) == 2 && a[i][j] == 1) {
        cout << "No" << endl;
        return 0;
      }
      if (abs(res[i] - res[j]) <= 1 && a[i][j] == 0) {
        cout << "No" << endl;
        return 0;
      }
    }
  }
  cout << "Yes" << endl;
  cout << res << endl;
  return 0;
}
