在探索一个古老的二维网格迷宫时,发现了许多被困住的猫娘。这些猫娘被一种名为"折线箭头"的魔法结界封印在网格的整数坐标点上。为了拯救她们,冒险者需要解除这些结界。
结界的规则非常奇怪:每个猫娘都面向一个特定的方向(共 $$$8$$$ 个方向)。如果一个猫娘所面对方向的射线上没有其他猫娘阻挡,她就可以被安全地移出地图(解除封印)。一旦一个猫娘被移出,她原本占据的位置就会变空,不再阻挡其他猫娘的视线。
冒险者当时救出了所有猫娘,成为了传说中的英雄。
如今,冒险者再次深入古老迷宫,发现猫娘们经过魔法强化后,每只都拥有了完整的身子!她们不再是孤零零的一个点,而是一个由多个相邻网格细胞组成的 $$$4$$$ 连通块。冒险者必须更加小心——现在任何猫娘的身子细胞都会阻挡其他猫娘的视线。
只有当一只猫娘眼睛位置发出的射线上(不含自身)没有任何其他猫娘的任何身子细胞时,她才能被安全救出。一旦救出,她整个身子的所有细胞会瞬间消失,不再阻挡任何人。
冒险者希望以字典序最小的顺序救出所有猫娘。如果存在多种可行顺序,请输出字典序最小的那个;若无法全部救出,请输出 $$$-1$$$。
有 $$$N$$$ 只猫娘。每只猫娘 $$$i$$$ 包含:
移除规则: 对于尚未被移除的猫娘 $$$i$$$,若从她的眼睛位置 $$$(ex_i, ey_i)$$$ 沿方向 $$$d_i$$$ 发出的无限射线(不含起点)上不存在任何其他猫娘的身子细胞,则她可以被移除。
移除后,该猫娘所有 $$$K_i$$$ 个细胞同时变空。
请判断是否能救出全部猫娘:
第一行包含一个正整数 $$$N$$$。 接下来为 $$$N$$$ 只猫娘的输入,每只格式如下:
若无法全部移除,输出一行 $$$-1$$$。 若可行,输出一行 $$$N$$$ 个整数($$$1 \sim N$$$ 的排列),表示按顺序移除的猫娘编号,请输出字典序最小的一种方案。
20 0 2 10 01 0 6 21 02 0
-1
30 0 2 30 01 02 00 2 4 10 23 0 4 23 04 0
3 1 2