CF534D Handshakes

题目描述

在 2 月 30 日,$n$ 名学生陆续来到 Berland 国立大学的奥赛编程培训中心(CTOP)。他们一个接一个地到达。每位学生进门后,在坐到自己的位子前,会与房间里的所有人握手致意。每个到来的学生在当天都不会离开 CTOP。 在任何时刻,任意三位学生都可以组队,参加一个团队比赛,该比赛一直持续到当天结束。组队参加比赛的三人团队在比赛期间不会被打扰,因此当新学生到来向房间里的其他人问好时,不会与正在比赛的团队成员握手。每个团队由恰好三位学生组成,并且每位学生只能参加一次团队。不同的团队可以在不同时间开始比赛。 给定每位学生与在场人数握手的数量,请你还原一种可能的学生到达 CTOP 的顺序。如果不存在这样的到达顺序,请输出这是不可能的。 请注意,有些学生可能会一直独自行动,直到当天结束,没有参与任何团队比赛。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^{5}$),表示到达 CTOP 的学生数量。 第二行包含 $n$ 个整数 $a_1, a_2, ..., a_n$($0 \leq a_i < n$),其中 $a_i$ 表示第 $i$ 位学生与多少人在场时握手。

输出格式

如果存在一种符合条件的学生到达顺序,第一行输出 “Possible”,第二行输出表示这种顺序的一个排列,排列中的每个数字表示学生的编号。如果第 $i$ 个数字在第 $j$ 个数字左边,表示第 $i$ 位学生比第 $j$ 位学生先到。如果有多个答案,可以输出任意一个。 如果不存在这样的顺序,只需输出一行 “Impossible”。

说明/提示

在第一个样例中,事件的顺序可能如下: - 学生 4 到达($a_4=0$),此时无人可与其握手; - 学生 5 到达($a_5=1$),与学生 4 握手; - 学生 1 到达($a_1=2$),与两位学生(4、5)分别握手; - 学生 3 到达($a_3=3$),与三位学生(4、5、1)分别握手; - 学生 4、5、3 组成团队开始比赛; - 学生 2 到达($a_2=1$),与学生 1 握手。 在第二个样例中,事件顺序可能如下: - 学生 7 到达($a_7=0$),无人可握手; - 学生 5 到达($a_5=1$),与学生 7 握手; - 学生 2 到达($a_2=2$),与学生 7、5 握手; - 学生 7、5、2 组成团队开始比赛; - 学生 1 到达($a_1=0$),无人可握手(因为其他人都在比赛); - 学生 6 到达($a_6=1$),与学生 1 握手; - 学生 8 到达($a_8=2$),与学生 1、6 握手; - 学生 3 到达($a_3=3$),与学生 1、6、8 握手; - 学生 4 到达($a_4=4$),与学生 1、6、8、3 握手; - 学生 8、3、4 组成团队开始比赛; - 学生 9 到达($a_9=2$),与学生 1、6 握手。 在第三个样例中,事件顺序可唯一还原: - 学生 1 到达($a_1=0$),无人可握手; - 学生 3(或 4)到达($a_3=a_4=1$),与学生 1 握手; - 学生 2 到达($a_2=2$),与学生 1、3(或 4)握手; - 剩下的学生 4(或 3),理论上应握手 1 人($a_3=a_4=1$),但实际上无论是组队比赛还是单独存在都无法实现这一条件。 由 ChatGPT 5 翻译