fun main() { val t = readLine()!!.toInt() for (i in 1..t) { print("Case #$i: ") solve() } } var g: Array> = Array(1) { mutableListOf(1) } var tin: IntArray = IntArray(0) var ans: BooleanArray = BooleanArray(0) var time = 0 fun dfs(u: Int): Int { tin[u] = ++time var mtin = Int.MAX_VALUE var cc = 0 for (v in g[u]) { if (tin[v] == 0) { cc++ val cmtin = dfs(v) if (cmtin >= tin[u]) ans[u] = true mtin = minOf(mtin, cmtin) } else { mtin = minOf(mtin, tin[v]) } } if (u == 0 && cc == 1) ans[u] = false return mtin } fun solve() { val (n, l) = readLine()!!.split(' ').map(String::toInt) g = Array(n + l) { mutableListOf() } tin = IntArray(n + l) ans = BooleanArray(n + l) time = 0 for (i in 0 until l) { val ki = readLine()!!.toInt() readLine()!!.split(' ').map { it.toInt() - 1 }.forEach { sij -> g[sij].add(n + i) g[n + i].add(sij) } } dfs(0) println(ans.drop(n).count { it }) }