#R10. 早餐
早餐
背景
在寒冷的冬天,一群赛码学校的学生特别热爱编程,于是他们来到了华夏航天基地的训练基地,这里有大灰机~,(编程学好了你可以造灰机),所以大家都在认真学习编程,每天早上这里有很丰富的早餐,但是不同的孩子有不同的喜欢食物!这就让希蒙这个大厨师为难了,现在你来帮他研究一下 给出的食物符合要求的方案数!!!!
题目描述
现有某种食品由k种原料组成(1≤k≤16),每种原料的编号为1,2,3,…,k。同时有n个人(1≤n≤1000),每个人对食品中的原料有一定的要求。全部的要求是一个n×k的矩阵。
a[1,1] a[1,2] a[1,3] ... a[1,k]
a[2,1] a[2,2] a[2,3] ... a[2,k]
...
a[n,1] a[n,2] a[n,3] ... a[n,k]
特别地
a[i,j] =1,表示第i个人对第j种原料要求一定要有。
a[i,j] =2,表示第i个人对第j种原料要求一定不能有。
a[i,j] =0,表示第i个人对第j种原料要求可有可无。
那么,当n,k和要求矩阵给出之后,求出所有符合要求的食品方案数。若不可能,则输出-1。
输入格式
第一行2个整数n和k,接下来n行,每行k个数据,每个数据分别为0,1或2,表示要求矩阵。
输出格式
一个整数,表示所有符合要求的食品方案数,如不可能,输出-1。
样例
样例输入1
2 3
1 0 1
0 0 1
样例输出1
2
样例输入2
2 3
1 0 1
2 0 0
样例输出2
-1
数据范围与提示
样例1输入输出解释: 即食品的三种原料为有,有,有或有,无,有均可,故有2种方案。
样例2输入输出解释: 第一个人需要第一种食材,第二个人不需要第一种食材,不可能同时满足要求,所以输出-1!