#P16648. [Ukiepc2017]Knightsbridge Rises
[Ukiepc2017]Knightsbridge Rises
题目描述
在富裕的骑士桥商业区,建造高层建筑时通常会使用一种被称为吊车的起重设备。
把吊车安装在地面上虽然很常见,却并不总是理想。例如,建造一座摩天大楼可能需要一台同样高的吊车。工程界的解决办法是使用较小的吊车,并把它直接安装在楼顶。
但这又带来了另一个问题:如此沉重的设备怎样才能被运到楼顶?解决办法是使用一台更小、但能够吊起主吊车的吊车。若这台较小的吊车仍然太重,就再找一台更小的吊车来吊起它,如此继续,直到找到一台重量为 、可以由工程师直接带上楼顶的吊车。
一台吊车到达某栋楼的楼顶后,可以用来把其他重量不超过其最大起重量的吊车吊到同一栋楼顶。吊车一旦被运到某栋楼顶,就不能再转移到其他楼上。
现在有若干栋正在施工的建筑。每栋建筑都要求最终在楼顶拥有一台能够吊起指定重量的吊车。请把现有吊车分配给各栋建筑,并为每栋建筑给出吊车被依次运上楼顶的顺序。
每台吊车最多只能使用一次。
输入格式
第一行包含一个整数 (),表示可用吊车的数量。
接下来 行,第 行包含两个整数 ():
- 表示第 台吊车的重量;
- 表示第 台吊车的最大起重量。
随后一行包含一个整数 (),表示建筑数量。
最后一行包含 个整数 (),其中 表示第 栋建筑最终需要从楼顶吊起的重量。
输出格式
若无法满足所有建筑的要求,输出:
impossible
否则输出 行。第 行输出若干个以空格分隔的整数
表示应当按照该顺序把编号为 的吊车运到第 栋楼顶。
输出序列必须满足:
- 第一台吊车的重量为 ,因此可以直接被带上楼顶;
- 对于每个 ,在它之前已经运上楼顶的吊车中,必须存在一台最大起重量不少于 的吊车;
- 最终楼顶至少有一台吊车的最大起重量不少于 ;
- 任意一台吊车不能出现在两栋不同建筑的序列中,也不能在同一序列中重复出现。
合法方案可能不唯一,因此本题需要 Special Judge。
样例 1
输入
5
0 1
1 2
2 3
3 4
0 2
2
4 2
输出
5 3 4
1 2
样例 2
输入
7
0 1
1 4
0 3
0 1
2 5
2 5
1 2
3
5 4 5
输出
3 5
1 2
4 7 6
样例 3
输入
2
0 1
5 3
2
2 1
输出
impossible