Link to this code: https://cses.fi/paste/7bcc5dba172caa2ad427fe/
// add me on genshin impact! 607984574
// Problem: Subarray Sum Constraints
// Attempted: 2025-07-29 07:59:44 EST

#include <bits/stdc++.h>
#ifndef LOCAL
#define debug(...) 0
#else
#include "/Users/envyaims/Documents/template/debug.cpp"
#endif
using namespace std;
using ll = long long;

#define F first
#define S second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define pq priority_queue
#define FOR(i,a,b) for(int i = (a); i < (b); ++i)
#define FORE(i,a,b) for(int i = (a); i <= (b); ++i)
#define ROF(i,a,b) for(int i = (a); i >= (b); --i)
#define trav(a,x) for(auto& a: x)
#define sz(x) (int)x.size()
#define make_unique(v) v.erase(unique(all(v)), v.end());
 
template<class T> using minpq = pq<T, vector<T>, greater<T>>;
template<class T> bool ckmin(T& a, const T& b){return b<a?a=b,1:0;}
template<class T> bool ckmax(T& a, const T& b){return a<b?a=b,1:0;}
template<int D, typename T>struct vt : public vector<vt<D - 1, T>> { template<typename... Args>
	vt(int n = 0, Args... args) : vector<vt<D - 1, T>>(n, vt<D - 1, T>(args...)) {}};
template<typename T> struct vt<1, T> : public vector<T> {
	vt(int n = 0, const T& val = T()) : vector<T>(n, val) {}};
template<typename T> istream& operator>>(istream& in, vector<T>& a) {for(auto &x : a) in >> x; return in;};
template<typename T> ostream& operator<<(ostream& out, vector<T>& a) {for(auto &x : a) out << x << ' '; return out;};


void uwu(){
	int n, m; cin >> n >> m;
	vt<2,pair<int,ll>> g(n+1);
	FOR(i,0,m){
		int u, v, w; cin >> u >> v >> w;
		// p[v] - p[u-1] = w
		g[u-1].pb({v, w});
		g[v].pb({u-1, -w});
	}
	vector<ll> p(n+1);
	vector<bool> vis(n+1);
	bool bad = 0;
	auto dfs = [&](auto self, int node, ll cur_w) -> void{
		if(vis[node]){
			if(cur_w != p[node]) bad = 1;
			return;
		}
		vis[node] = 1;
		p[node] = cur_w;
		trav(i, g[node]){
			self(self, i.F, cur_w + i.S);
		}
	};
	FOR(i,0,n+1){
		if(vis[i]) continue;
		dfs(dfs, i, 0);
	}
	if(bad){
		cout << "NO" << "\n";
		return;
	}
	cout << "YES" << "\n";
	FOR(i,0,n) cout << p[i+1] - p[i] << " ";
}

signed main(){
	cin.tie(0) -> sync_with_stdio(0);
	int t = 1;
	// cin>>t;
	while(t--){
		uwu();
	}
}