#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,n) for(int i=0;i #define pii pair #define f first #define s second #define pb push_back #define mp make_pair #define pb push_back #define rep(i,n) for(int i=0;i,bool>M; vectorseq; int SUM; vector >B; bool rec(int i,vector&state){ if(M.find(state) != M.end()){ return M[state]; } if(i==SUM){ rep(j,state.size()){ if(state[j]!=0) return 0; } return 1; } bool cur = 0; rep(j,state.size()){ if(B[j][state[j]] == seq[i]){ state[j]--; cur=rec(i+1,state); state[j]++; if(cur) break; } } M[state]=cur; return cur; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); //fr; int T; cin >> T; while(T--){ int N; cin >> N; B.clear(); M.clear(); seq.clear(); B.resize(N); vector state; SUM = 0; rep(i,N){ cin >> A[i]; SUM+=A[i]; B[i].resize(A[i]+1); rep(j,A[i]) { cin >> B[i][j+1]; } B[i][0] = 1011; state.pb(A[i]); } seq.resize(SUM); rep(j,SUM) cin >> seq[j]; if(N!=1 and rec(0,state)){ cout << "Yes\n"; } else if(N==1){ seq.pb(1011); reverse(seq.begin(),seq.end()); if(seq==B[0]){ cout<<"Yes\n"; } else{ cout<<"No\n"; } } else{ cout << "No\n"; } } }