#P2037. Roll Playing Games

Roll Playing Games

描述
Phil Kropotnik 是一名游戏制作人,他经常遇到的一个问题就是决定在游戏中使用哪些骰子。在当前的许多游戏中,通常需要非传统的骰子,即面数多于或少于传统6面立方体的骰子。通常情况下,Phil 会为除最后一个骰子外的所有骰子随机选择数值,然后尝试确定最后一个骰子的具体数值,以便以特定概率(实际上,Phil 并不直接处理概率,而是处理掷出所有骰子时得到特定总和的可能组合数)得到某些总和。目前,他需要手动完成这一过程,但显然他希望将这一过程自动化。这就是你的任务。

例如,假设 Phil 从一个面值为 11101015152020 的4面骰子开始,他希望确定如何标记一个5面骰子,使得:
a) 有 33 种方式得到总和 22
b) 有 11 种方式得到总和 33
c) 有 33 种方式得到总和 1111
d) 有 44 种方式得到总和 1616
e) 有 11 种方式得到总和 2626
为了满足这些条件,他应该在5面骰子的面上标记数值 1111112266。(例如,总和 1616 可以通过 10+610 + 615+115 + 1 得到,其中第二个骰子有三个不同的 11 面可选,因此总共有 44 种不同的方式。)

输入
输入包含多组数据。每组数据的第一行是一个整数 nn,表示已指定的骰子数量。接下来的 nn 行每行描述一个骰子,每行以一个整数 ff(表示骰子的面数)开头,后跟 ff 个整数,表示每个面的数值。每组数据的最后一行格式如下:

rr mm v1v_1 c1c_1 v2v_2 c2c_2 v3v_3 c3c_3 ... vmv_m cmc_m

其中,rr 是待确定骰子的面数,mm 是感兴趣的总和数量,v1v_1、...、vmv_m 是这些总和,c1c_1、...、cmc_m 是对应总和所需的不同组合数。

输入值满足以下约束:
1n201 \leq n \leq 20
3f203 \leq f \leq 20
1m101 \leq m \leq 10
4r64 \leq r \leq 6
所有骰子(包括已指定和待确定的骰子)的面值均为 115050 之间的整数,viv_icic_i 的值均为非负且严格小于 3232 位有符号整数的最大值。

最后一组数据后是一个单独的行,包含一个 00,表示输入结束,无需处理。

输出
对于每组数据,输出一行,内容为“Final die face values are”后跟 rr 个非降序排列的面值;如果没有满足条件的骰子,则输出“Impossible”。如果有多个骰子满足条件,选择面值最小的骰子;如果仍有多个解,则选择第二小面值最小的骰子,依此类推。

样例输入

1
4 1 10 15 20
5 5 2 3 3 1 11 3 16 4 26 1
1
6 1 2 3 4 5 6
6 3 7 6 2 1 13 1
4
6 1 2 3 4 5 6
4 1 2 2 3
3 3 7 9
8 1 4 5 9 23 24 30 38
4 4 48 57 51 37 56 31 63 11
0

样例输出

Final die face values are 1 1 1 2 6
Impossible
Final die face values are 3 7 9 9