#include <bits/stdc++.h>
using namespace std;
bool g[500][500];
set<int> st;
set<int> bst;
bool check(vector<int>& q, vector<int>& p, bool match) {
  for (auto Q : q)
    for (auto P : p)
      if (Q != P && g[Q][P] != match) return false;
  return true;
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) g[i][j] = (i == j);
  int m;
  cin >> m;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    g[a][b] = g[b][a] = true;
  }
  for (int i = 0; i < n; i++) bst.insert(i);
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (!g[i][j]) {
        st.insert(i);
        bst.erase(i);
        st.insert(j);
        bst.erase(j);
      }
    }
  }
  vector<int> b;
  for (auto l : bst) b.push_back(l);
  if (b.size() == n) {
    cout << "Yes\n";
    for (int i = 0; i < n; i++) cout << "b";
    cout << endl;
    return 0;
  }
  vector<int> ac;
  for (auto l : st) ac.push_back(l);
  vector<int> a;
  vector<int> c;
  a.push_back(ac[0]);
  for (int i = 1; i < ac.size(); i++) {
    if (g[ac[0]][ac[i]])
      a.push_back(ac[i]);
    else
      c.push_back(ac[i]);
  }
  bool result = check(a, b, true) && check(a, c, false) && check(b, c, true) &&
                check(a, a, true) && check(b, b, true) && check(c, c, true);
  if (!result)
    cout << "No\n";
  else {
    cout << "Yes\n";
    string s = "abc";
    vector<int> ans(n);
    for (auto l : a) ans[l] = 0;
    for (auto l : b) ans[l] = 1;
    for (auto l : c) ans[l] = 2;
    for (auto l : ans) cout << s[l];
    cout << endl;
  }
}
