#include<bits/stdc++.h>
#define N 210
using namespace std;
int n,m;
int f[N][N];
#define fi first
#define se second
#define mp make_pair
#define pr pair<int,int>
pr st[2010];
inline int read(){int t;scanf("%d",&t);return t;}
int inf;
int ans[N];
int Max[N];
int main()
{
	memset(f,0x3f3f3f3f,sizeof(f));
	inf=f[0][0];
	n=read(),m=read();
	for(int i=1;i<=n;i++) f[i][i]=0;
	for(int i=1;i<=m;i++)
	{
		int l=read(),r=read(),b=read();
		if(b) f[l][r]=1,f[r][l]=-1; 
		else f[l][r]=1,f[r][l]=1;
		st[i]=mp(l,r);
	}
	for(int k=1;k<=n;k++)
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	f[i][j]=min(f[i][k]+f[k][j],f[i][j]);
	for(int i=1;i<=n;i++)
	if(f[i][i]<0) //负环 
	{
		cout<<"NO";
		return 0;
	}
	for(int i=1;i<=m;i++)//奇环 
	{
		int l=st[i].fi,r=st[i].se;
		if(f[1][l]==f[1][r]) 
		{
			cout<<"NO";
			return 0;
		}
	}
	//没有奇环 abs条件就一定成立
	int mmax=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		if(f[i][j]!=inf) 
		Max[i]=max(Max[i],f[i][j]);
		mmax=max(mmax,Max[i]);
	}	
	cout<<"YES\n";
	cout<<mmax<<'\n';
	for(int i=1;i<=n;i++)
	if(mmax==Max[i])
	{
		int mmin=inf;
		for(int j=1;j<=n;j++) mmin=min(mmin,f[i][j]);
		for(int j=1;j<=n;j++) cout<<f[i][j]-mmin<<" ";
		break;
	}
	return 0;
}