#include <bits/stdc++.h>
using namespace std;
bool is_prime(int x) {
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0) return false;
  }
  return true;
}
int mod1, mod2;
int osn;
vector<int> v[300300];
int hash1[300300];
int pow1[300300];
bool ok = true;
bool vis[300300];
int val[300300];
bool is_eq(int s, int t) {
  int hs1 = hash1[s];
  int ht1 = hash1[t];
  hs1 -= pow1[t];
  if (hs1 < 0) hs1 += mod1;
  ht1 -= pow1[s];
  if (ht1 < 0) ht1 += mod1;
  return (hs1 == ht1);
}
vector<int> who[600600];
int st = 1;
void dfs(int s, int c) {
  if (!ok) return;
  vis[s] = true;
  val[s] = c;
  who[c].push_back(s);
  if (val[s] == val[1]) {
    for (int i = 0; i < (int)(v[s]).size(); i++) {
      int nxt = v[s][i];
      if (is_eq(s, nxt)) {
        if (vis[nxt]) {
          if (val[s] != val[nxt]) {
            ok = false;
            return;
          }
        } else {
          if (st <= -3) {
            ok = false;
            return;
          }
          dfs(nxt, c);
        }
      } else {
      }
    }
  } else {
    for (int i = 0; i < (int)(v[s]).size(); i++) {
      int nxt = v[s][i];
      if (is_eq(s, nxt)) {
        if (vis[nxt]) {
          if (val[s] != val[nxt]) {
            ok = false;
            return;
          }
        } else {
          dfs(nxt, c);
        }
      } else {
      }
    }
  }
  if (val[s] == val[1]) {
    for (int i = 0; i < (int)(v[s]).size(); i++) {
      int nxt = v[s][i];
      if (is_eq(s, nxt)) {
      } else {
        if (vis[nxt]) {
          if (abs(val[s] - val[nxt]) != 1) {
            ok = false;
            return;
          }
        } else {
          if (st <= -3) {
            ok = false;
            return;
          }
          dfs(nxt, c + st);
          st -= 2;
        }
      }
    }
  } else {
    for (int i = 0; i < (int)(v[s]).size(); i++) {
      int nxt = v[s][i];
      if (is_eq(s, nxt)) {
      } else {
        if (vis[nxt]) {
          if (abs(val[s] - val[nxt]) != 1) {
            ok = false;
            return;
          }
        } else {
          dfs(nxt, c + st);
        }
      }
    }
  }
}
int main() {
  mod1 = 1e9 + 7;
  osn = 2;
  pow1[0] = 1;
  for (int i = 1; i < 300300; i++) {
    pow1[i] = pow1[i - 1] * osn;
    if (pow1[i] >= mod1) pow1[i] -= mod1;
  }
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    v[a].push_back(b);
    v[b].push_back(a);
    hash1[a] += pow1[b];
    if (hash1[a] >= mod1) hash1[a] -= mod1;
    hash1[b] += pow1[a];
    if (hash1[b] >= mod1) hash1[b] -= mod1;
  }
  dfs(1, 300300);
  for (int i = 0; i < 600600; i++) {
    if (!ok) break;
    for (int j = 0; j < (int)(who[i]).size(); j++) {
      if (!ok) break;
      for (int k = j + 1; k < (int)(who[i]).size(); k++) {
        if (!ok) break;
        int s = who[i][j];
        int t = who[i][k];
        if (!is_eq(s, t)) {
          ok = false;
          break;
        }
      }
    }
  }
  if (ok) {
    printf("YES\n");
    for (int i = 1; i <= n; i++) printf("%d ", val[i]);
  } else
    printf("NO\n");
  return 0;
}
