using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace MoreCombos { // A simple Scanner class meant to be similar to java's scanner. // Author: Daniel Wasserman // Date: 2013-05-30 class Scanner { TextReader Reader; public Scanner(TextReader reader) { Reader = reader; } static int Index = 0; static string[] CurrentLine = { }; public bool HasNext() { if (CurrentLine.Length == Index) { try { CurrentLine = Reader.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); Index = 0; return HasNext(); } catch (System.IO.IOException e) { return false; } } return true; } public String Next() { if (HasNext()) return CurrentLine[Index++]; return null; } public int NextInt() { return int.Parse(Next()); } public long NextLong() { return long.Parse(Next()); } public float NextFloat() { return float.Parse(Next()); } public double NextDouble() { return double.Parse(Next()); } } class Program { static void Main(string[] args) { Scanner input = new Scanner(new StreamReader("morecombos.in")); int cases = input.NextInt(); for (int caseOn = 1; caseOn <= cases; caseOn++) { int b = input.NextInt(); int k = input.NextInt(); int[] bitSets = new int[b]; for (int i = 0; i < b; i++) { int n = input.NextInt(); for (int j = 0; j < n; j++) bitSets[i] |= (1 << input.NextInt() - 1); } int ans = 0; for (int i = 0; i < (1 << b); i++) { if (bitCount(i) > k) continue; int bitMask = 0; for (int j = 0; j < b; j++) { if ((i & (1 << j)) != 0) { bitMask |= bitSets[j]; } } ans = Math.Max(bitCount(bitMask), ans); } Console.WriteLine(ans); } } static int bitCount(int b) { if (b == 0) return 0; return (b & 1) + bitCount(b >> 1); } } }