#include using namespace std; const int N=2e5+5; mt19937 rnd(114514); int T,n,d[N],id[N],cnt[N],ans,rt[N],ls[N*50],rs[N*50],tree[N*50],tot1,c[N],p1[N],p2[N]; vectorv1[N],e[N],g[N],col[N]; bool Check; bool cmp(int x,int y){return d[x]x)return false; c[id[i]]=col[l].back(); col[l+d[id[i]]].emplace_back(col[l].back()),col[l].pop_back(); } return true; } void change(int &x,int l,int r,int pos) { if(!x)x=++tot1,ls[x]=rs[x]=tree[x]=0; tree[x]++; if(l==r)return; int mid=(l+r)/2; if(pos<=mid)change(ls[x],l,mid,pos); else change(rs[x],mid+1,r,pos); } int solve(int x,int l,int r,int k) { if(l==r)return l; int mid=(l+r)/2,val=mid-l+1-tree[ls[x]]; if(val>T; while(T--) { cin>>n; for(int i=1;i<=n;i++)v1[i].clear(),e[i].clear(),g[i].clear(),p1[i]=p2[i]=0; for(int i=1;i<=n;i++) { cin>>d[i],id[i]=i; for(int j=1,x;j<=d[i];j++) { cin>>x,v1[i].emplace_back(x); if(!p1[x])p1[x]=i; else p2[x]=i; } g[i].resize(v1[i].size()); } for(int i=1;i<=n;i++) { for(auto j:v1[i]) { if(p1[j]==i)e[i].emplace_back(p2[j]); else e[i].emplace_back(p1[j]); } } sort(id+1,id+n+1,cmp); int l=1,r=n; while(l<=r) { int mid=(l+r)/2; if(check(mid))r=mid-1; else l=mid+1; } cout<