# Google Code Jam 2023 Farewell Round B - Railroad Maintenance class UnionFind: def __init__(self, n): self.n = n self.group = [i for i in range(n)] self.rank = [0 for i in range(n)] def isSame(self, a, b): return self.getRoot(a) == self.getRoot(b) def getRoot(self, a): if self.group[a] == a: return a else: self.group[a] = self.getRoot(self.group[a]) return self.group[a] def unite(self, a, b): a = self.getRoot(a) b = self.getRoot(b) if (a == b): return if (self.rank[a] < self.rank[b]): self.group[a] = b else: self.group[b] = a if (self.rank[a] == self.rank[b]): self.rank[a] += 1 t = int(input()) for case in range(1, t + 1): n, l = map(int, input().split()) k = [] for i in range(l): int(input()) k.append(list(map(int, input().split()))) ans = 0 for i in range(l): uf = UnionFind(n) for j in range(l): if j==i: continue for m in range(1, len(k[j])): uf.unite(k[j][0]-1, k[j][m]-1) for j in range(1, n): if uf.getRoot(0) != uf.getRoot(j): ans += 1 break print("Case #{}: {}".format(case, ans))