#include <bits/stdc++.h>
using namespace std;
const string nameFiles = "";
void error(vector<string>::iterator) {}
template <typename T, typename... Args>
void error(vector<string>::iterator cur_var, T a, Args... args) {
  cerr << cur_var->substr((*cur_var)[0] == ' ') << " = " << a << endl;
  error(++cur_var, args...);
}
vector<string> split(string const& str, char c) {
  vector<string> res;
  stringstream ss(str);
  string x;
  while (getline(ss, x, c)) res.emplace_back(x);
  return move(res);
}
vector<bool> used(1000, false);
void dfs() {}
int main() {
  ios_base::sync_with_stdio(false);
  if (!nameFiles.empty()) {
    freopen((nameFiles + ".in").c_str(), "r", stdin);
    freopen((nameFiles + ".out").c_str(), "w", stdout);
  }
  int n, m;
  cin >> n >> m;
  vector<vector<int>> a(n, vector<int>(n, 0));
  int x, y;
  for (int i = 0; i < m; ++i) {
    cin >> x >> y;
    x--, y--;
    a[x][y] = 1;
    a[y][x] = 1;
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      if (i == j) continue;
      for (int k = 0; k < n; ++k) {
        if (j == k || i == k) continue;
        if (a[i][j] + a[j][k] + a[i][k] == 0) {
          cout << "No" << endl;
          return 0;
        }
      }
    }
  }
  vector<char> res(n, 0);
  queue<int> q;
  q.push(0);
  for (int i = 0; i < n; ++i) {
    if (q.empty()) {
      for (int j = 0; j < n; ++j)
        if (!used[j]) {
          q.push(j);
          break;
        }
      if (q.empty()) break;
    }
    int cur = q.front();
    used[cur] = true;
    q.pop();
    for (int j = 0; j < n; ++j) {
      if (cur == j) continue;
      if (a[cur][j] == 0) {
        char inv = 'c';
        if (res[cur] == 0) {
          res[cur] = 'a';
        } else if (res[cur] == 'c')
          inv = 'a';
        if (res[j] == 0) {
          res[j] = inv;
          q.push(j);
        } else if (res[j] != inv) {
          cout << "No" << endl;
          return 0;
        }
      }
    }
  }
  for (int i = 0; i < n; ++i)
    if (res[i] == 0) res[i] = 'b';
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j) {
      if (i == j) continue;
      if (a[i][j] == 0) {
        if (!((res[i] == 'a' && res[j] == 'c') ||
              (res[i] == 'c' && res[j] == 'a'))) {
          cout << "NO" << endl;
          return 0;
        }
      } else if (((res[i] == 'a' && res[j] == 'c') ||
                  (res[i] == 'c' && res[j] == 'a'))) {
        cout << "NO" << endl;
        return 0;
      }
    }
  cout << "Yes" << endl;
  for (char c : res) cout << c;
  return 0;
}
