猪是一种简单的动物,喜欢吃根类蔬菜,拥有着强壮的背部。
题目描述
新年到了!Farmer Fat 要给农场内一些表现优秀的猪猪们发胡萝卜作为年终奖,以犒劳猪猪们一年的辛苦劳作,并激励它们在新的一年再接再厉。
Farmer Fat 的农场里共有 $N$ 头猪猪,它们分为 $K$ 个家族,第 $i$ 个家族中包含 $s_i$ 头猪猪。同一家族的猪猪间互为亲戚,每头猪猪恰好属于一个家族。
春节期间,猪猪们间会有拜访。一次猪猪 A 对猪猪 B 的拜访中,猪猪 A 会到另一头猪猪 B 的家里去,并顺便看看猪猪 B 是否有得到 Farmer Fat 发的年终奖。如果猪猪 A 没得到年终奖、而猪猪 B 得到了年终奖,猪猪 A 就会很不爽。
如果猪猪 A 拜访过了猪猪 B,那么猪猪 B 就会觉得没有必要再去拜访猪猪 A 了。由于同一个家族内的猪猪间都很熟,所以它们之间不会拜访。而对于任意两头非亲戚的猪猪 A,B,一定有 A 拜访过 B、或 B 拜访过 A。
Farmer Fat 得知了猪猪间的拜访过程,并意外地发现了过程中没有任何一头猪猪感到不爽。他想让你算算,有多少种可能的给猪猪发年终奖的方案。两种方案不同当且仅当存在一头猪猪使得在一种方案中给该猪猪发了年终奖而在另一种方案中没有。由于答案可能非常大,输出对 $10^9+7$ 取模的结果。
约束
对于全部数据,满足 $1\le N\le 2000$,对于任意 $i$ 有 $s_i\ge 1$。 子任务 1(27pts): $N\le 18$; 子任务 2(21pts):对于任意 $i$ 有 $s_i=1$; 子任务 3(22pts): $K=2$; 子任务 4(30pts):无特殊限制。
输入格式
输入数据的第一行包含一个整数 $K$。 第二行包含 $K$ 个整数 $s_1,\cdots,s_K$。由题意,可知 $N=s_1+s_2+\cdots+s_K$。
为了方便,我们将所有猪猪编号为 $1,2,\cdots,N$,其中第一个家族的猪猪编号依次为 $1,2,\cdots, s_1$,第二个家族的猪猪编号依次为 $s_1+1,s_1+2,\cdots,s_1+s_2$,以此类推。
接下来 $N$ 行,第 $i$ 行(设猪猪 $i$ 属于第 $k$ 个家族)包含一个长度为 的 01 串,它的第 个字符为 1 则表示春节期间猪猪 $i$ 拜访了猪猪 $j$,为 0 则表示春节期间猪猪 $j$ 拜访了猪猪 $i$。
可以看出,输入数据最后 行中的前 行都是空行,为了方便这些空行将被删去,具体格式可见样例输入。
输出格式
输出一行一个整数表示答案对 $10^9+7$ 取模的结果。
样例 1
样例输入:
2
2 2
01
10
样例输出:
2
样例 2
样例输入:
2
2 1
11
样例输出:
5