#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e6+5;
ll n,m;
vector<array<ll,3>>v[maxn];
vector<pair<ll,ll>>path;
vector<ll>ans;
ll vis[maxn],vis1[maxn],ori;
void dfs(ll x,ll last){
if(vis[x]==-1||vis[x]==ori||ans.size()) return;
bool a=(vis[x]>0),b=(ori==-2);
vis[x]=ori,vis1[x]=1;
for(auto [to,col,id]:v[x]){
if(col==last) continue;
if(b) ori=col;
path.push_back({x,id});
if(vis1[to]==1&&col!=ori){
while(path.back().first!=to){
ans.push_back(path.back().second);
path.pop_back();
}
ans.push_back(path.back().second);
return;
}
else if(vis1[to]==0) dfs(to,col);
path.pop_back();
if(ans.size()) return;
}
if(a) vis[x]=-1;
vis1[x]=0;
}
void solve(){
cin>>n>>m;
for(int i=1;i<=m;i++){
ll a,b,c;
cin>>a>>b>>c;
v[a].push_back({b,c,i});
}
for(int i=1;i<=n;i++){
ori=-2;
dfs(i,0);
}
if(ans.size()){
cout<<"YES\n"<<ans.size()<<' ';
for(auto i:ans) cout<<i<<' ';
cout<<'\n';
ans.clear();
}
else cout<<"NO\n";
for(int i=1;i<=n;i++){
v[i].clear();
vis[i]=vis1[i]=0;
}
path.clear();
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
int _=1;
cin>>_;
while(_--) solve();
}