你正在玩一种纸牌游戏,游戏中有 $N$ 叠正面朝上的牌,每叠初始时有 $C$ 张牌。每张牌都有一个数值(value)和一个花色(suit),且游戏中不存在两张牌的数值和花色组合完全相同。
在一次移动中,你可以执行以下操作之一:
- 如果有两张或更多相同花色的牌位于不同牌叠的顶部,你可以移除其中数值最小的那张牌。(当你移除某一叠的最后一张牌时,该牌叠依然存在,只是变为空叠。)
- 如果存在一个空叠,你可以从任意一个非空牌叠的顶部取出一张牌,并将其放置在该空叠的顶部(即作为该空叠中的唯一一张牌)。
如果你能通过一系列移动,使得最终每个牌叠中最多只有一张牌,你就赢得了游戏。给定初始排列,判断是否可能赢得游戏。
输入格式
输入的第一行包含一个整数 $P$,表示测试用例中将使用的预制牌叠数量。接下来有 $P$ 行,第 $i$ 行以一个整数 $C_i$ 开头,表示第 $i$ 个预制牌叠中的牌数,随后是 $C_i$ 个整数对。这些有序对中的第 $j$ 个包含两个整数 $V_{ij}$ 和 $S_{ij}$,分别表示第 $i$ 个预制牌叠中从顶部数第 $j$ 张牌的数值和花色。
接下来的一行包含一个整数 $T$,表示测试用例的数量。随后是 $T$ 个测试用例。每个测试用例的第一行包含两个整数 $N$ 和 $C$:牌叠的数量以及每叠牌的张数。接下来的一行包含 $N$ 个整数 $P_i$,表示该测试用例所使用的预制牌叠的索引(从 $0$ 开始)。
输出格式
对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 $1$ 开始),如果可能赢得游戏则 $y$ 为 POSSIBLE,否则为 IMPOSSIBLE。
数据范围
时间限制:每个测试集 20 秒。 内存限制:1 GB。 $1 \le T \le 100$。 $2 \le P \le 60000$。 $0 \le P_i < P$,对于所有 $i$。 第 $P_i$ 个预制牌叠恰好有 $C$ 张牌。 测试用例中不存在两张牌的数值和花色组合完全相同。
小型数据集(测试集 1 - 可见)
$2 \le N \le 4$。 $2 \le C_i \le 13$,对于所有 $i$。 $2 \le C \le 13$。 $1 \le V_{ij} \le 13$,对于所有 $i$ 和 $j$。 $1 \le S_{ij} \le 4$,对于所有 $i$ 和 $j$。
大型数据集(测试集 2 - 隐藏)
$2 \le N \le 50000$。 $2 \le C_i \le 50000$,对于所有 $i$。 $2 \le C \le 50000$。 $4 \le N \times C \le 10^5$。 $1 \le V_{ij} \le 50000$,对于所有 $i$ 和 $j$。 $1 \le S_{ij} \le 50000$,对于所有 $i$ 和 $j$。
样例
输入 1
5 2 7 2 7 1 2 6 4 7 4 2 3 2 6 2 2 4 2 10 2 2 5 4 7 3 2 2 2 0 2 3 2 4 1 3
输出 1
Case #1: POSSIBLE Case #2: IMPOSSIBLE
说明
在样例 1 中,有两叠牌,每叠有两张。第一叠顶部是花色 2 数值为 7 的牌,下面是花色 1 数值为 7 的牌。第二叠顶部是花色 2 数值为 3 的牌,下面是花色 2 数值为 6 的牌。
可以通过以下方式赢得游戏: 移除第二叠中花色 2 数值为 3 的牌。 移除第二叠中花色 2 数值为 6 的牌。这使得第二叠变为空叠。 * 将花色 2 数值为 7 的牌移动到第二叠。此时满足获胜条件:所有牌叠最多只有一张牌。
在样例 2 中,有三叠牌,每叠有两张。此情况下无法赢得游戏;唯一可能的移动是移除第三叠顶部花色 4 数值为 5 的牌,但这不会开启任何新的移动。