#include<bits/stdc++.h>
#define MAXN 300100
using namespace std;
struct node{int y,next;}e[MAXN<<1];
int n,m,len,Link[MAXN],p[MAXN],hash[MAXN],col[MAXN],vis[MAXN],used[MAXN<<1];
inline int read(){
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if(ch==’-‘) f=-1; ch=getchar();}
while(isdigit(ch)) {x=x*10+ch-‘0’; ch=getchar();}
return x*f;
}
void insert(int x,int y){e[++len].next=Link[x];Link[x]=len;e[len].y=y;}
void dfs(int x){
vis[x]=1;
for(int i=Link[x];i;i=e[i].next)if(hash[e[i].y]==hash[x])col[e[i].y]=col[x];
for(int i=Link[x];i;i=e[i].next)if(!vis[e[i].y]){
if(!col[e[i].y]){
for(int j=col[x]-1;j<=col[x]+1;++j)if(!used[j]){
col[e[i].y]=j; used[j]=1; break;
}
}
dfs(e[i].y);
}
}
int main(){
n=read(); m=read();
for(int i=1;i<=n;++i)p[i]=p[i-1]*31+i;
for(int i=1;i<=n;++i)hash[i]=p[i];
for(int i=1;i<=m;++i){
int x=read(),y=read();
insert(x,y); insert(y,x);
hash[x]+=p[y]; hash[y]+=p[x];
}
col[1]=300001; used[col[1]]=1; vis[1]=1; dfs(1);
for(int i=1;i<=n;++i)if(!col[i]){puts(“NO”);return 0;}
puts(“YES”);
for(int i=1;i<=n;++i)printf(“%d “,col[i]);
printf(“\n”);
return 0;
}