#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 99999937
#define endl '\n'
int color[1000005],ot[1000005],fre[1000005],vis[1000005];
vector <array <int,3>> v[1000005];
vector <int> nxt,ans;
vector <array<int,2>> edge;
int u=0;
int n,m;
void find(int i){
if(u==1) return;
int j=i;
fre[j]--;
while(fre[i]>0){
j=edge[nxt.back()][0];
ans.push_back(nxt.back());
nxt.pop_back();
fre[j]--;
}
u=1;
return;
}
void dfs(int i,int last){
fre[i]++;
if(color[i]!=0){
find(i);
}
if(ot[i]!=last&&ot[i]!=0){
find(i);
}
if(ot[i]==last) color[i]=last;
for(auto [j,c,idx]:v[i]){
if(last==c||u==1||vis[i]==1) continue;
ot[i]=c;
nxt.push_back(idx);
dfs(j,c);
nxt.pop_back();
}
return;
}
void mark(int i){
vis[i]=1;
for(auto [j,c,idx]:v[i]){
if(vis[j]==1) continue;
mark(j);
}
return;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t;
cin>>t;
while(t--){
cin>>n>>m;
for(int i=0;i<m;i++){
int a,b,c;
cin>>a>>b>>c;
v[a].push_back({b,c,i});
edge.push_back({a,b});
}
for(int i=1;i<=n;i++){
if(vis[i]==0){
dfs(i,-1);
if(u==1) break;
mark(i);
}
}
if(u==0) cout<<"NO"<<endl;
else{
cout<<"YES"<<endl;
cout<<ans.size()<<" ";
reverse(ans.begin(),ans.end());
for(int i:ans) cout<<i+1<<" ";
cout<<endl;
}
edge.clear();nxt.clear();ans.clear();
u=0;
for(int i=1;i<=n;i++){
v[i].clear();
fre[i]=ot[i]=color[i]=vis[i]=0;
}
}
return 0;
}