#include using namespace std; #define rep(i,a,b) for (int i = a; i < b; i++) #define trav(a,b) for (auto a : b) #define all(x) begin(x),end(x) #define lld long long const int Mx=2'000'000; int MARKED[Mx]; pair,set* >ST[Mx]; bool elimi[Mx]; bool Tr(int a, int b){ if(ST[a].second->size()>ST[b].second->size())swap(a,b); bool condint=false; bool condex=false; trav(x,*ST[a].second){ if(ST[b].second->find(x)!=ST[b].second->end()){ condex=true; } if(ST[b].second->find(x)==ST[b].second->end()){ condint=true; } } if(condex && condint){ return true; } return false; } void Solve() { int n,m; cin>>n>>m; rep(i,0,m)MARKED[i]=-1; rep(i,0,n){ elimi[i]=false; int k; cin>>k; ST[i].first={k,i}; ST[i].second=new set(); rep(j,0,k){ int x; cin>>x; x--; ST[i].second->insert(x); } } sort(ST,ST+n); rep(i,0,n){ trav(a,*ST[i].second){ if(MARKED[a]==-1){ MARKED[a]=i; }else{ if(elimi[MARKED[a]]){ MARKED[a]=i; }else{ if(Tr(MARKED[a],i)){ cout<<"YES\n"; cout<> tt; while (tt--) Solve(); return 0; }