集卡
题号:NC206910
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小明喜欢的游戏最近推出了一个关于游戏卡牌的活动,只有能够收集全部种类的m张游戏卡牌,就兑换最终大奖;为此小明特意去线下商店购买游戏卡包。假设你是这个商店的老板,你的店里有
n包游戏卡牌,每包里有k张游戏卡。现在你已经通过特殊手段得知每个卡包里的卡牌种类,你想知道小明是不是正的欧皇,能通过买最小数量的卡包,来赢得大奖。现在你有一个任务,就是通过已知条件算出购买卡包的最小数量是多少?

输入描述:

第一行有一个整数T( 1 ≤ T ≤ 10 )表示共有T组测试样例
接下来每组的第一行有三个整数n,m,k( 1 ≤ n ≤ 100 , 1 ≤ m ≤ 17 , 1 ≤ k ≤ 17 )
n-卡包数
m-总卡牌种类数
k-卡包中的卡牌张数
接下来的n行,每行有k个整数,a1,a2 ··· ak ( 1 ≤ ai ≤ m ) 代表一个卡包中每张卡的卡牌种类。

输出描述:

一个整数表示最小数量,如果小明无法集齐所有卡牌,输出-1。
示例1

输入

复制
2
7 8 4
1 3 5 7
2 4 6 7
8 7 6 5
4 3 2 1
8 8 8 8
2 3 5 7
1 8 8 8
1 2 1
1

输出

复制
2
-1