9257 - 宴会安排(banquets)

由上海米哈游网络科技股份有限公司制作发行的一款开放世界冒险游戏——原神,在今年春节期间开放了一个活动——海灯节。在海灯节活动期间,在璃月港可以看到海上万千宵灯飞入夜幕,是到访璃月不可错过的奇景。在海灯节尾声,胡桃胡堂主设宴邀请了一众宾客聚餐,在这个聚餐的PV剧情中送上了不亚于春晚“语言类节目”的表演。看似是在吃席,期间却是展现了中国的“年夜饭文化”,特别是在各宾客入席时,由于胡堂主宴请的均为璃月的青年才俊以及声名赫赫之人,在入席落座时互相谦让。现在胡堂主想亲自给他们安排座位,请根据以下要求,编写一个程序帮助胡堂主。
假如宾客有k组,每组n个,每一组的宾客一字排开。在宴请的宾客中,每一组都有一些宾客不能安排在相邻位置。要求你对每一组宾客的座位进行安排,如果有安排方案,请输出安排方案的总数,如果没有安排方案则输出NO。

输入

从文件banquets.in中读入数据。
第一行输入一个正整数k,代表有k组宾客。
第二行输入两个正整数n1和m1,代表宴请宾客的人数n1,有m1对宾客不能安排在一块。
第三行输入n1个正整数,代表宾客的序号≤100。
接下来的m1行代表不能安排在相邻的位置的宾客序号。
第m1+3行输入第二组的n2和m2 代表宴请第二组宾客的人数为n2,m2代表有几对宾客不能相邻。
接下来的m2行代表不能相邻的宾客序号。
……

输出

按顺序输出每一组的安排方案总数,若某一组没有安排方案则输出NO。

样例

输入

4
4 2
1 2 3 4
1 2
1 3
4 3
4 9 12 36
4 9
9 12
36 4
5 3
1 2 3 4 5
2 5
3 1
2 1
4 3
1 2 3 4
1 2
1 3
1 4

输出

4
2
20
NO

提示

【样例1解释】
输入共4组数据,第一组有4个宾客,宾客序号为1 2 3 4。1号和2号宾客不能相邻,1号和3号宾客不能相邻。共有四种方案,分别为:1 4 2 3、1 4 3 2、2 3 4 1、3 2 4 1,输出4。
第二组有5个宾客,宾客序号为4 9 12 36,不能相邻的宾客分别为4号和9号、9号和12号、36号和4号。共有两种方案,分别为4 12 36 9、9 36 12 4,输出2。
【数据范围】 对于20%的数据k≤5,n≤4,m≤4。
对于100%的数据k≤50,n≤10,m≤10。

来源

云南编程挑战赛

时间限制 1 秒
内存限制 512 MB
讨论 统计
上一题 下一题