#include <bits/stdc++.h>
#define pii pair<int, int>
#define ff first
#define ss second
#define int long long
#define pb push_back
using namespace std;
int n, m;
vector<vector<tuple<int, int, int>>> viz;
vector<int> marc;
vector<int> ordem;
bool dfs(int v, int ant, int prim, int vp, int i){
if(v==vp&&ant!=prim){
ordem.push_back(i);
return 1;
}
if(marc[i])return 0;
ordem.push_back(i);
marc[i]=1;
for(auto [u, w, id]:viz[v]){
if(w!=ant){
if(dfs(u, w, prim, vp, id))return 1;
}
}
ordem.pop_back();
return 0;
}
void solve(){
cin >> n >> m;
viz.assign(n, {});
vector<pii> arestas(m);
vector<int> pesos(m);
for(int i=0; i<m; i++){
int a, b, c; cin>> a >> b >> c;
a--; b--;
viz[a].pb({b, c, i});
pesos[i]=c;
arestas[i]={a, b};
}
for(int i=0; i<m; i++){
marc.assign(m, 0);
ordem ={};
if(dfs(arestas[i].ss, pesos[i], pesos[i], arestas[i].ff, i)){
cout << "YES"<<endl;
cout << ordem.size()<<" ";
for(int j:ordem){
cout << j+1<<" ";
}
cout << endl;
return;
}
}
cout << "NO"<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int t; cin >> t;
while(t--){
solve();
}
}