#include #include #include using namespace std; struct node{ int t; int di; }; int main(){ int T; scanf("%d",&T); for(int k = 0;k < T;k++){ int n; scanf("%d",&n); bool book[20005] = {false}; //表示是否感染 book[1] = true; vector > v(n+1); //输入数据 for(int i = 1;i <= n;i++){ int x; scanf("%d",&x); for(int j = 0;j < x;j++){ //第n个人有 x 个时间位置 int t,di; scanf("%d%d",&t,&di); node p; p.t = t; p.di = di; v[i].push_back(p); } } for(int t = 1;t <= 100;t++){ //找到危险的地方 bool book2[15] = {false};//表示是否有病毒 for(int i = 1;i <= n;i++){ //查看每一个人 if(book[i] == true){ for(int j = 0;j < v[i].size();j++){ if(v[i][j].t == t){ book2[v[i][j].di] = true; } } } } //找到这些地方的所有人 for(int i = 2;i <= n;i++){ if(book[i] == false){ for(int j = 0;j < v[i].size();j++){ if(v[i][j].t == t && book2[v[i][j].di] == true){ book[i] = true; } } } } } vector p; for(int i = 1;i <= n;i++){ if(book[i] == true){ p.push_back(i); } } for(int i = 0;i < p.size()-1;i++){ printf("%d ",p[i]); } printf("%d",p[p.size()-1]); putchar('\n'); } }