#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>using namespace std;int N, M, TT;const int SS = 40;const int INF = 0x3fffffff;struct Edge { int v, c, next; };Edge e[10000];int idx, head[50];int lv[50], que[50];int front, tail;void insert(int a, int b, int c) { e[idx].v = b, e[idx].c = c; e[idx].next = head[a]; head[a] = idx++;}bool bfs() { front = tail = 0; memset(lv, 0xff, sizeof (lv)); lv[SS] = 1; que[tail++] = SS; while (front < tail) { int u = que[front++]; for (int i = head[u]; i != -1; i = e[i].next) { int v = e[i].v; if (!(~lv[v]) && e[i].c) { lv[v] = lv[u] + 1; if (v == TT) return true; que[tail++] = v; } } } return false;}int dfs(int u, int sup) { if (u == TT) return sup; int tf = 0, f; for (int i = head[u]; i != -1; i = e[i].next) { int v = e[i].v; if (lv[u]+1==lv[v] && e[i].c && (f=dfs(v, min(e[i].c, sup-tf)))) { tf += f; e[i].c -= f, e[i^1].c += f; if (tf == sup) return sup; } } if (!tf) lv[u] = -1; return tf;}int dinic() { int ret = 0; while (bfs()) { ret += dfs(SS, INF); } return ret;}int main() { int T; scanf("%d", &T); while (T--) { int x, y; char op[5]; idx = 0; memset(head, 0xff, sizeof (head)); scanf("%d %d", &M, &N); TT = N; for (int i = 0; i < M; ++i) { scanf("%s %d", op, &x); if (op[0] == 'I') { insert(SS, i, INF); insert(i, SS, 0); } for (int j = 0; j < x; ++j) { scanf("%d", &y); insert(i, y, INF); insert(y, i, 1); } } int ans = dinic(); if (ans < INF) { printf("%dn", ans); } else { puts("PANIC ROOM BREACH"); } } return 0; }