#include<iostream>
#include<map>
#include<queue>
#include<algorithm>
#define endl '\n'
using namespace std;
int n,m;
struct school{
    map<int,int> s2r; //student to rank, rank=-1:正取, 0:落榜, >0:備取順序
    priority_queue<pair<int,int>> stu; //錄取學生 first:rank second:stu id
    int count;
}sch[60];
struct student{
    vector<int> gn; //志願順序
    int real; //錄取第幾志願
}stu[100100];
void procstu(int si)
{
    student &s=stu[si];
    int goal=s.real+1;
    while(goal<s.gn.size())
    {
        school &gch=sch[s.gn[goal]];
        int mrank=gch.s2r[si];
        if( mrank!=0 && (gch.stu.size() < gch.count || mrank < gch.stu.top().first) )
        {
            gch.stu.push(make_pair(mrank,si));
            s.real=goal;
            if(gch.stu.size()>gch.count)
            {
                stu[gch.stu.top().second].real=-1;
                int tmp=gch.stu.top().second;
                gch.stu.pop();
                procstu(tmp);
            }
            return;
        }
        goal++;
    }
    s.real=-1;
}
int main()
{
    ios::sync_with_stdio(0);
    //cin.tie(0);

    int T;
    cin>>T;
    while(T--)
    {
//        cout<<"no "<<T<<endl;
        cin>>n>>m;
        fill_n(sch,m+5,school());
        fill_n(stu,n+10,student());
        for(int i=1;i<=n;i++)
        {
            int t;
            cin>>t;
            stu[i].gn.resize(t);
            for(int j=0;j<t;j++)
                cin>>stu[i].gn[j];
            stu[i].real=-1;
        }
        for(int i=1;i<=m;i++)
        {
            int a,b;
            cin>>a>>b;
            sch[i].count=a;
            for(int j=0;j<b;j++)
            {
                int t;
                cin>>t;
                if(j<a)
                    sch[i].s2r[t]=-1;
                else
                    sch[i].s2r[t]=j-a+1;
            }
        }
        for(int i=1;i<=n;i++)
            procstu(i);
        for(int i=1;i<=n;i++)
        {
            int t=stu[i].real;
            if(t==-1)cout<<-1<<endl;
            else cout<<stu[i].gn[t]<<endl;
        }
    }
}
