#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <cstdint>
#include <cstdio>
#define input(a) scanf("%d",&a)
#define print(a) printf("%d",a)
#define pcr putchar('\n')
#define pck putchar(' ')
using namespace std;
const int MAXN = 1e6+7;
void init();
int T;
int n,m;
void print_edge();
struct node{
int to[MAXN],nxt[MAXN],w[MAXN];
int head[MAXN],cnt;
void add(int x,int y,int z){
to[++cnt] = y;
nxt[cnt] = head[x];
w[cnt] = z;
head[x] = cnt;
}
void operator()(int i){
to[i] = nxt[i] = w[i] = head[i] = 0;
}
}e;
queue<int > q;
int dis[MAXN],cnt[MAXN];
bool vis[MAXN];
bool spfa(int s){
cnt[s] = 0;
dis[s] = 0;
vis[s] = true;
q.push(s);
while(!q.empty()){
int x = q.front();
vis[x] = 0;
q.pop();
for(int i = e.head[x];i;i = e.nxt[i]){
int v = e.to[i];
if(dis[v] > dis[x] + e.w[i]){
dis[v] = dis[x] + e.w[i];
if(++cnt[v] >= n) return true;
if(!vis[v]){
q.push(v);
vis[v] = true;
}
}
}
}
return false;
}
int main(){
freopen("P3385_1.in","r",stdin);
freopen("a.out","w",stdout);
input(T);
do{
init();
print_edge();
if(spfa(1)) puts("YES");
else puts("NO");
}while(--T);
fclose(stdout);
return 0;
}
void init(){
e.cnt = 0;
for(int i = 0; i <= n ; ++ i) {
vis[i] = false;
dis[i] = 0x7f7f7f;
cnt[i] = 0;
e(i);
}
while(!q.empty())q.pop();
input(n),input(m);
for(int i = 0; i < m ; ++ i){
int x,y,z;
input(x),input(y),input(z);
if(z >= 0) e.add(x,y,z),e.add(y,x,z);
else e.add(x,y,z);
}
}
void print_edge(){
for(int i = 1; i <= n; ++ i){
for(int j = e.head[i];j;j = e.nxt[j]){
printf("%d %d %d\n",i,e.to[j],e.w[j]);
}
}
}