#include <bits/stdc++.h>
using namespace std;
bool graph[505][505];
vector<int> G[501];
char ans[505];
bool visited[505];
void dfs(int x, bool a) {
  visited[x] = true;
  if (ans[x] != 'b') ans[x] = a ? ('a') : 'c';
  for (int i = 0; i < (int)G[x].size(); i++)
    if (visited[G[x][i]] == false && ans[G[x][i]] != 'b') dfs(G[x][i], a);
}
int main() {
  int a = 0, b = 0, c = 0, v1 = 0, v2 = 0;
  cin.sync_with_stdio(0);
  int n, m, u, v;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> u >> v;
    u--;
    v--;
    graph[u][v] = true;
    graph[v][u] = true;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  bool f = true;
  for (int i = 0; i < n && f; i++) {
    if ((int)G[i].size() == (n - 1)) continue;
    for (int j = 0; j < n && f; j++) {
      if (i != j && graph[i][j] == false) {
        v1 = i;
        v2 = j;
        f = false;
        break;
      }
    }
  }
  for (int i = 0; i < n; i++)
    if ((int)G[i].size() == (n - 1)) ans[i] = 'b', b++;
  if (m) {
    a = (G[v1].size() - b + 1);
    c = (G[v2].size() - b + 1);
  }
  if (m == 0 && n == 2) {
    cout << "Yes\nac\n";
  } else if (a + b + c != n)
    cout << "No\n";
  else {
    dfs(v1, 0);
    dfs(v2, 1);
    ans[n] = 0;
    bool flag = true;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n && flag; j++) {
        if (i == j) continue;
        if ((abs(ans[i] - ans[j]) == 2 && graph[i][j]) ||
            (abs(ans[i] - ans[j]) < 2 && !graph[i][j]))
          flag = false;
      }
    }
    if (flag) {
      cout << "Yes\n";
      cout << ans << "\n";
    } else
      cout << "No\n";
  }
  return 0;
}
