Venn 区间图是一种在 1D 空间中展示集合交集的图形化方法,类似于更为常见的 2D Venn 图。Venn 区间图的定义是为每个集合 $S_i$ 分配一个非零长度的整数区间 $[l_i, u_i)$。不同区间重叠的区域对应于不同集合组合的交集(见图 N.1)。
图 N.1:对应于样例输入 1 的 Venn 区间图。分配给六个集合 A 到 F 的区间显示在顶部;图中编码的区域沿着数轴标注。该 Venn 区间图有九个区域,且是非退化的(因为没有任何区间包含在另一个区间内)。
更正式地说,给定分配给每个集合的区间,你可以通过以下算法计算 Venn 区间图中出现的区域:
- 将所有区间的起点 $l_i$ 和终点 $u_i$ 合并为一个集合,并对它们进行排序,得到一个整数序列 $p_1 < p_2 < \dots < p_m$。
- 对于每个跨越连续 $p$ 值的区间 $(p_j, p_{j+1})$,用所有满足 $(p_j, p_{j+1}) \subseteq [l_i, u_i)$ 的集合 $S_i$ 对其进行标记。(注意:不存在部分重叠的情况:$p$-区间要么完全包含在每个集合区间内,要么与之不相交)。
- 所有非空标签的集合即为 Venn 区间图的区域。每个标签 $\{S_a, S_b, \dots\}$ 代表集合 $S_a \cap S_b \cap \dots$ 的交集。
在上述示例 Venn 区间图中,有六个集合(A 到 F)和九个区域($B, A \cap B, A, A \cap C, A \cap C \cap D, C \cap D, D, E$ 和 $F$)。这个示例 Venn 区间图有一个“空洞”,即没有任何集合重叠的地方(在区域 D 的末尾和 E 的起点之间);这是允许的。还要注意 $E \cap F$ 不是一个区域:E 和 F 的区间在端点处接触,但它们在 $p$-区间上并不重叠。
并非每个区域列表都有对应的 Venn 区间图插图。例如,考虑区域 $A \cap B, B \cap C$ 和 $C \cap A$。无法在实线上布置 A、B 和 C 的区间来精确形成这三个区域(任何包含这三个区域的 Venn 区间图也必须包含 $A \cap B \cap C$)。此外,如果任何区间包含在另一个区间内,即对于某些 $i \neq j$ 满足 $l_i \le l_j$ 且 $u_j \le u_i$,则 Venn 区间图是退化的。例如,如果 C 的右端点在 4 而不是 5,图 N.1 中的 Venn 区间图就会变成退化的,因为分配给集合 C 的区间将被包含在 A 的区间内(对应于样例输入 3)。
给定一个区域列表,构造一个包含恰好这些区域的非退化 Venn 区间图(如果可能)。
输入格式
第一行包含一个整数 $n$,表示图中所需的区域数量($1 \le n \le 4\,000$)。接下来的 $n$ 行每行描述一个区域。每行以一个整数 $k$ 开头,表示形成该区域的集合数量($1 \le k \le 2\,000$),随后是 $k$ 个以空格分隔的集合名称。每个集合名称仅包含小写或大写字母(a-z, A-Z),且名称长度不超过十个字符。同一行中列出的所有集合名称都是不同的,且没有两个区域列出完全相同的集合名称集合。所有区域中总共出现的唯一集合名称不超过 $2\,000$ 个。
输出格式
如果不存在满足输入要求的非退化 Venn 区间图,则输出 IMPOSSIBLE 且不再输出其他内容。
否则,打印描述任意一个有效图的区间。对于输入中出现的每个集合名称,打印一行输出,以该集合名称开头,后跟两个以空格分隔的整数 $l$ 和 $r$:即分配给该集合名称的区间的左端点和右端点。端点必须满足 $-10^6 \le l < u \le 10^6$。你可以按任意顺序列出集合,但输入中出现的每个集合名称必须对应恰好一行输出。
输入中的每个区域必须在你的 Venn 区间图中至少出现一次,且你的图中不得包含输入中未指定的任何其他区域。你的图必须是非退化的:没有任何区间应被包含在另一个区间内。
样例
样例输入 1
9 1 A 2 A B 1 B 2 A C 3 A C D 2 C D 1 D 1 E 1 F
样例输出 1
B -1 1 A 0 4 C 2 5 D 3 6 E 7 8 F 8 9
样例输入 2
3 2 A B 2 B C 2 C A
样例输出 2
IMPOSSIBLE
样例输入 3
8 1 A 2 A B 1 B 2 A C 3 A C D 1 D 1 E 1 F
样例输出 3
IMPOSSIBLE