#pragma GCC diagnostic ignored  -Wunused-parameter    #define _USE_MATH_DEFINES   #include <bits/stdc++.h>      using namespace std;      #define INP  solve    #define OUT  solve       const long long INF_LL = 8e18;   const int INF = 1e9 + 100;   const int MOD = 1e9 + 7;   //const int Base = 311;9   const long double EPS = 1e-10;   const int BLOCK = 1000;   const int dx[4] = {0, 0, 1, -1};   const int dy[4] = {1, -1, 0, 0};   mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());      void open_file() {       #ifdef THEMIS           freopen(INP  .inp , r ,stdin);           freopen(OUT  .out , w ,stdout);       #endif // THEMIS   }      const int maxN = 3e5 + 100;      void sol(){       int n;       cin >> n;       vector<vector<int> > s(n);       map<int, int> id;       int M = 0;       int N = 0;       for (int i = 0; i < n; i++) {           int k;           cin >> k;           M += k;           s[i].resize(k);           for (int j = 0; j < k; j++) {               int x;               cin >> x;               if (!id.count(x)) id[x] = N++;               s[i][j] = id[x];           }           sort(s[i].begin(), s[i].end());       }       int block = (int)sqrt(M) + 1;       vector<int> large, small;       for (int i = 0; i < n; i++) {           if ((int)s[i].size() >= block) large.push_back(i);           else small.push_back(i);       }          int time = 0;       vector<int> visited(N, 0);       for (int u : large) {           time++;           for (int x : s[u]) visited[x] = time;           for (int v = 0; v < n; v++) {               if (u == v) continue;               int d = 0;               for (int val : s[v]) {                   d += visited[val] == time;                   if (d == 2) {                       cout << u + 1 <<     << v + 1 <<   n ;                       return;                   }               }           }       }          vector<vector<int> > adj(N);       for (int i = 0; i < n; i++) {           for (int x : s[i]) adj[x].push_back(i);       }       vector<int> last(N, -1), pos(N, -1);       for (int u = 0; u < N; u++) {           for (int i : adj[u]) {               if ((int)s[i].size() < block) {                   for (int j = 0; j < (int)s[i].size() && s[i][j] < u; j++) {                       int v = s[i][j];                       if (last[v] == u) {                           cout << pos[v] + 1 <<     << i + 1 <<   n ;                           return;                       }                       last[v] = u;                       pos[v] = i;                   }               }           }       }          cout << -1 <<   n ;   }      void solve() {       clock_t begin = clock();           int T;       cin >> T;       //T = 1;       int TestCase = 0;       while (T--) {           TestCase += 1;           //cout <<  Case #  << TestCase <<  :  <<    ;           //cout <<  Test   << TestCase <<  :  ;           sol();       }       clock_t end = clock();       cerr <<  Time:   << fixed << setprecision(10) << (double)(end - begin) / (double)CLOCKS_PER_SEC <<   n ;   }      int main(int argc,char *argv[]) {       ///srand(time(nullptr));       ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr);       open_file();       solve();   }