#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")

#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef vector<vector<int> > vvi;
typedef vector<pair<int, int> > vpii;
typedef pair<int, int> pii;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
typedef vector<ll> vll;
#define INF 0x3f3f3f3f
#define MOD 1000000007LL
#define EPS 0.00001
#define f first
#define s second
#define pb push_back
#define mp make_pair

#define FOR(i, a, b) for (int i=(a); i<=(signed)(b); i++)
#define F0R(i, a) for (int i=0; i<(signed)(a); i++)
#define RFOR(i, a, b) for (int i=(a); i >= b; i--)

#define MN 205 //check limits you incompetent ree
int n, m;
pii rng[MN][MN];

int c[MN];
bool dfs(int cn){
    FOR(nn, 1, n){
        if(nn != cn && rng[cn][nn] != mp(-INF, INF)){
            if(c[nn] == c[cn]) return false;
            else if(c[nn] == -1){
                c[nn] = !c[cn];
                if(!dfs(nn)) return false;
            }
        }
    }
    return true;
}

pii uni(pii x, pii y){
    return {max(x.f, y.f), min(x.s, y.s)};
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;
    FOR(i, 1, n){
        FOR(j, 1, n){
            rng[i][j] = {-INF, INF};
        }
        rng[i][i] = {0, 0};
    }
    F0R(_, m){
        int u, v, b;
        cin >> u >> v >> b;
        if(b==0){
            rng[u][v] = rng[v][u] = {-1, 1};
        } else{
            rng[u][v] = {1, 1};
            rng[v][u] = {-1, -1};
        }
    }
    memset(c, -1, sizeof c);
    c[1] = 0;
    if(!dfs(1)){
        cout << "NO\n";
        return 0;
    }
    FOR(k, 1, n){
        FOR(i, 1, n){
            FOR(j, 1, n){
                rng[i][j] = uni(rng[i][j], {rng[i][k].f+rng[k][j].f, rng[i][k].s+rng[k][j].s});
                if(rng[i][j].f > rng[i][j].s){
                    cout << "NO\n";
                    return 0;
                }
            }
        }
    }
    cout << "YES\n";
    int amt = -INF;
    int sm = -1;
    FOR(i, 1, n){
        FOR(j, 1, n){
            //cout << i << " " << j << " " << rng[i][j].f << " " << rng[i][j].s << "\n";
            if(rng[i][j].s > amt){
                amt = rng[i][j].s;
                sm = i;
            }
        }
    }
    cout << amt << "\n";
    FOR(i, 1, n){
        cout << rng[sm][i].s << " ";
    }
    cout << "\n";

    return 0;
}
