//teja349
#include <bits/stdc++.h>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <utility>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <iomanip>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
//setbase - cout << setbase (16); cout << 100 << endl; Prints 64
//setfill - cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
//setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
//cout.precision(x) cout<<fixed<<val; // prints x digits after decimal in val
using namespace std;
using namespace __gnu_pbds;
#define f(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) f(i,0,n)
#define fd(i,a,b) for(i=a;i>=b;i--)
#define pb push_back
#define mp make_pair
#define vi vector< int >
#define vl vector< ll >
#define ss second
#define ff first
#define ll long long
#define pii pair< int,int >
#define pll pair< ll,ll >
#define sz(a) a.size()
#define inf (1000*1000*1000+5)
#define all(a) a.begin(),a.end()
#define tri pair<int,pii>
#define vii vector<pii>
#define vll vector<pll>
#define viii vector<tri>
#define mod (1000*1000*1000+7)
#define pqueue priority_queue< int >
#define pdqueue priority_queue< int,vi ,greater< int > >
#define flush fflush(stdout)
#define primeDEN 727999983
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// find_by_order() // order_of_key
typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
#define int ll
struct Edge{
int u,v,c;
};
Edge ed[123456];
int dist[123456],visit[123456];
vector<vi> adj(123456),rev(123456);
int dfs(int cur){
visit[cur]=1;
int i;
rep(i,adj[cur].size()){
if(!visit[adj[cur][i]]){
dfs(adj[cur][i]);
}
}
return 0;
}
int revdfs(int cur){
int i;
visit[cur]=1;
rep(i,rev[cur].size()){
if(!visit[rev[cur][i]]){
revdfs(rev[cur][i]);
}
}
return 0;
}
main(){
std::ios::sync_with_stdio(false); cin.tie(NULL);
int tt;
cin>>tt;
while(tt--){
int n,m;
cin>>n>>m;
int i,j;
int t,u,v,c;
ll iinf = inf;
iinf*=inf;
rep(i,n){
adj[i].clear();
rev[i].clear();
}
rep(i,m){
cin>>t>>u>>v>>c;
u--;
v--;
if(t==1){
ed[i].u=u;
ed[i].v=v;
ed[i].c=-1*c;
}
else{
ed[i].u=v;
ed[i].v=u;
ed[i].c=c-1;
}
}
rep(i,n){
dist[i]=iinf;
}
dist[0]=0;
rep(i,n+2){
rep(j,m){
u=ed[j].u;
v=ed[j].v;
c=ed[j].c;
if(dist[v]>dist[u]+c){
dist[v]=dist[u]+c;
}
}
}
int bad=0;
rep(j,m){
u=ed[j].u;
v=ed[j].v;
c=ed[j].c;
if(dist[v]>dist[u]+c){
bad=1;
}
}
if(bad){
cout<<"NO"<<endl;
continue;
}
rep(i,m){
u=ed[i].u;
v=ed[i].v;
c=ed[i].c;
if(dist[u]==iinf)
continue;
if(dist[v]==dist[u]+c){
adj[u].pb(v);
rev[v].pb(u);
}
}
rep(i,n){
visit[i]=0;
}
dfs(0);
rep(i,n){
if(visit[i]==0)
bad=1;
}
rep(i,n){
visit[i]=0;
}
revdfs(0);
rep(i,n){
if(visit[i]==0)
bad=1;
}
if(bad){
cout<<"NO"<<endl;
continue;
}
else{
cout<<"YES"<<endl;
}
rep(i,n){
cout<<dist[i]<<" ";
}
cout<<endl;
}
return 0;
}
Ly90ZWphMzQ5CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4gCi8vc2V0YmFzZSAtIGNvdXQgPDwgc2V0YmFzZSAoMTYpOyBjb3V0IDw8IDEwMCA8PCBlbmRsOyBQcmludHMgNjQKLy9zZXRmaWxsIC0gICBjb3V0IDw8IHNldGZpbGwgKCd4JykgPDwgc2V0dyAoNSk7IGNvdXQgPDwgNzcgPDwgZW5kbDsgcHJpbnRzIHh4eDc3Ci8vc2V0cHJlY2lzaW9uIC0gY291dCA8PCBzZXRwcmVjaXNpb24gKDE0KSA8PCBmIDw8IGVuZGw7IFByaW50cyB4Lnh4eHgKLy9jb3V0LnByZWNpc2lvbih4KSAgY291dDw8Zml4ZWQ8PHZhbDsgIC8vIHByaW50cyB4IGRpZ2l0cyBhZnRlciBkZWNpbWFsIGluIHZhbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CgojZGVmaW5lIGYoaSxhLGIpIGZvcihpPWE7aTxiO2krKykKI2RlZmluZSByZXAoaSxuKSBmKGksMCxuKQojZGVmaW5lIGZkKGksYSxiKSBmb3IoaT1hO2k+PWI7aS0tKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHZpIHZlY3RvcjwgaW50ID4KI2RlZmluZSB2bCB2ZWN0b3I8IGxsID4KI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPCBpbnQsaW50ID4KI2RlZmluZSBwbGwgcGFpcjwgbGwsbGwgPgojZGVmaW5lIHN6KGEpIGEuc2l6ZSgpCiNkZWZpbmUgaW5mICgxMDAwKjEwMDAqMTAwMCs1KQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksYS5lbmQoKQojZGVmaW5lIHRyaSBwYWlyPGludCxwaWk+CiNkZWZpbmUgdmlpIHZlY3RvcjxwaWk+CiNkZWZpbmUgdmxsIHZlY3RvcjxwbGw+CiNkZWZpbmUgdmlpaSB2ZWN0b3I8dHJpPgojZGVmaW5lIG1vZCAoMTAwMCoxMDAwKjEwMDArNykKI2RlZmluZSBwcXVldWUgcHJpb3JpdHlfcXVldWU8IGludCA+CiNkZWZpbmUgcGRxdWV1ZSBwcmlvcml0eV9xdWV1ZTwgaW50LHZpICxncmVhdGVyPCBpbnQgPiA+CiNkZWZpbmUgZmx1c2ggZmZsdXNoKHN0ZG91dCkgCiNkZWZpbmUgcHJpbWVERU4gNzI3OTk5OTgzCm10MTk5Mzcgcm5nKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CgovLyBmaW5kX2J5X29yZGVyKCkgIC8vIG9yZGVyX29mX2tleQp0eXBlZGVmIHRyZWU8CmludCwKbnVsbF90eXBlLApsZXNzPGludD4sCnJiX3RyZWVfdGFnLAp0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+Cm9yZGVyZWRfc2V0OwoKI2RlZmluZSBpbnQgbGwKCnN0cnVjdCBFZGdlewoJaW50IHUsdixjOwp9OwpFZGdlIGVkWzEyMzQ1Nl07CmludCBkaXN0WzEyMzQ1Nl0sdmlzaXRbMTIzNDU2XTsKCnZlY3Rvcjx2aT4gYWRqKDEyMzQ1NikscmV2KDEyMzQ1Nik7CgppbnQgZGZzKGludCBjdXIpewoJdmlzaXRbY3VyXT0xOwoJaW50IGk7CglyZXAoaSxhZGpbY3VyXS5zaXplKCkpewoJCWlmKCF2aXNpdFthZGpbY3VyXVtpXV0pewoJCQlkZnMoYWRqW2N1cl1baV0pOwoJCX0KCX0KCXJldHVybiAwOwp9CgppbnQgcmV2ZGZzKGludCBjdXIpewoJaW50IGk7Cgl2aXNpdFtjdXJdPTE7CglyZXAoaSxyZXZbY3VyXS5zaXplKCkpewoJCWlmKCF2aXNpdFtyZXZbY3VyXVtpXV0pewoJCQlyZXZkZnMocmV2W2N1cl1baV0pOwoJCX0KCX0KCXJldHVybiAwOwp9CgptYWluKCl7CiAgICBzdGQ6Omlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKCWludCB0dDsKCWNpbj4+dHQ7Cgl3aGlsZSh0dC0tKXsKCQlpbnQgbixtOwoJCWNpbj4+bj4+bTsKCQlpbnQgaSxqOwoJCWludCB0LHUsdixjOwoJCWxsIGlpbmYgPSBpbmY7CgkJaWluZio9aW5mOwoJCXJlcChpLG4pewoJCQlhZGpbaV0uY2xlYXIoKTsKCQkJcmV2W2ldLmNsZWFyKCk7CgkJfQoJCXJlcChpLG0pewoJCQljaW4+PnQ+PnU+PnY+PmM7CgkJCXUtLTsKCQkJdi0tOwoJCQlpZih0PT0xKXsKCQkJCWVkW2ldLnU9dTsKCQkJCWVkW2ldLnY9djsKCQkJCWVkW2ldLmM9LTEqYzsKCQkJfQoJCQllbHNlewoJCQkJZWRbaV0udT12OwoJCQkJZWRbaV0udj11OwoJCQkJZWRbaV0uYz1jLTE7CgkJCX0KCQl9CgkJcmVwKGksbil7CgkJCWRpc3RbaV09aWluZjsKCQl9CgkJZGlzdFswXT0wOwoJCXJlcChpLG4rMil7CgkJCXJlcChqLG0pewoJCQkJdT1lZFtqXS51OwoJCQkJdj1lZFtqXS52OwoJCQkJYz1lZFtqXS5jOwoJCQkJaWYoZGlzdFt2XT5kaXN0W3VdK2MpewoJCQkJCWRpc3Rbdl09ZGlzdFt1XStjOwoJCQkJfQoJCQl9CgkJfQoJCWludCBiYWQ9MDsKCQlyZXAoaixtKXsKCQkJdT1lZFtqXS51OwoJCQl2PWVkW2pdLnY7CgkJCWM9ZWRbal0uYzsKCQkJaWYoZGlzdFt2XT5kaXN0W3VdK2MpewoJCQkJYmFkPTE7CgkJCX0KCQl9CgkJaWYoYmFkKXsKCQkJY291dDw8Ik5PIjw8ZW5kbDsKCQkJY29udGludWU7CgkJfQoJCXJlcChpLG0pewoJCQl1PWVkW2ldLnU7CgkJCXY9ZWRbaV0udjsKCQkJYz1lZFtpXS5jOwoJCQlpZihkaXN0W3VdPT1paW5mKQoJCQkJY29udGludWU7CgkJCWlmKGRpc3Rbdl09PWRpc3RbdV0rYyl7CgkJCQlhZGpbdV0ucGIodik7CgkJCQlyZXZbdl0ucGIodSk7CgkJCX0KCQl9CgkJcmVwKGksbil7CgkJCXZpc2l0W2ldPTA7CgkJfQoJCWRmcygwKTsKCgkJcmVwKGksbil7CgkJCWlmKHZpc2l0W2ldPT0wKQoJCQkJYmFkPTE7CgkJfQoJCXJlcChpLG4pewoJCQl2aXNpdFtpXT0wOwoJCX0KCQlyZXZkZnMoMCk7CgoJCXJlcChpLG4pewoJCQlpZih2aXNpdFtpXT09MCkKCQkJCWJhZD0xOwoJCX0KCQlpZihiYWQpewoJCQljb3V0PDwiTk8iPDxlbmRsOwoJCQljb250aW51ZTsKCQl9CgkJZWxzZXsKCQkJY291dDw8IllFUyI8PGVuZGw7CgkJfQoJCXJlcChpLG4pewoJCQljb3V0PDxkaXN0W2ldPDwiICI7CgkJfQoJCWNvdXQ8PGVuZGw7CgoKCgl9CiAgICByZXR1cm4gMDsgICAKfQ==