func_code_string: #include<bits/stdc++.h>   #define mp make_pair   #define pr pair<int,int>   #define pb push_back   using namespace std;   int k[100005],all[200005];   vector<int>a[100005];   struct nd{    int val,id;    nd(){}    nd(int val,int id):val(val),id(id){}    bool operator <(const nd &x)const{     return val<x.val;    }   };   vector<nd>w[200005];   int prew[200005];   int vis[200005];   int main(){    int t;    scanf( %d ,&t);    while(t--){     int n;     scanf( %d ,&n);     for(int i=0;i<n;i++)a[i].clear();     for(int i=0;i<n;i++){      scanf( %d ,&k[i]);      a[i].resize(k[i]);      for(int j=0;j<k[i];j++)scanf( %d ,&a[i][j]);   //   for(int j=0;j<k[i];j++){   //    int x;   //    scanf( %d ,&x);   //    a[i].pb(x);   //   }      sort(a[i].begin(),a[i].end());     }     int m=0;     for(int i=0;i<n;i++)for(int j=0;j<k[i];j++)all[m++]=a[i][j];     sort(all,all+m);     int len=unique(all,all+m)-all;     for(int i=0;i<len;i++)w[i].clear();     for(int i=0;i<n;i++)for(int j=0;j<k[i];j++)a[i][j]=lower_bound(all,all+len,a[i][j])-all;     int D=sqrt(m)/6;     int flag=0;     for(int i=0;i<len;i++)vis[i]=0;     for(int i=0;i<n;i++){      if(k[i]>D){       for(int j=0;j<k[i];j++)vis[a[i][j]]=1;       for(int j=0;j<n;j++)if(j!=i){        int cnt=0;        for(int l=0;l<k[j];l++)if(vis[a[j][l]])cnt++;        if(cnt>=2){         flag=1;         printf( %d %d n ,i+1,j+1);         break;        }       }       if(flag)break;       for(int j=0;j<k[i];j++)vis[a[i][j]]=0;      }     }      if(flag)continue;   //  for(int i=0;i<n;i++)if(k[i]<=D)for(int j=0;j<k[i];j++)for(int l=j+1;l<k[i];l++)prew[a[i][j]]++;   //  for(int i=0;i<len;i++)w[i].resize(prew[i]);   //  for(int i=0;i<len;i++)prew[i]=0;   //  for(int i=0;i<n;i++)if(k[i]<=D)for(int j=0;j<k[i];j++)for(int l=j+1;l<k[i];l++)w[a[i][j]][prew[a[i][j]]++]=mp(a[i][l],i);     for(int i=0;i<n;i++)if(k[i]<=D)for(int j=0;j<k[i];j++)for(int l=j+1;l<k[i];l++)w[a[i][j]].pb(nd(a[i][l],i));     for(int i=0;i<len;i++)sort(w[i].begin(),w[i].end());     for(int i=0;i<len;i++){      int l=w[i].size();      for(int j=0;j<l-1;j++)if(w[i][j].val==w[i][j+1].val && w[i][j].id!=w[i][j+1].id){       flag=1;       printf( %d %d n ,w[i][j].id+1,w[i][j+1].id+1);       break;      }       if(flag)break;     }     if(!flag)printf( -1 n );    }    return 0;   } 