#P16648. [Ukiepc2017]Knightsbridge Rises

[Ukiepc2017]Knightsbridge Rises

题目描述

在富裕的骑士桥商业区,建造高层建筑时通常会使用一种被称为吊车的起重设备。

把吊车安装在地面上虽然很常见,却并不总是理想。例如,建造一座摩天大楼可能需要一台同样高的吊车。工程界的解决办法是使用较小的吊车,并把它直接安装在楼顶。

但这又带来了另一个问题:如此沉重的设备怎样才能被运到楼顶?解决办法是使用一台更小、但能够吊起主吊车的吊车。若这台较小的吊车仍然太重,就再找一台更小的吊车来吊起它,如此继续,直到找到一台重量为 00、可以由工程师直接带上楼顶的吊车。

一台吊车到达某栋楼的楼顶后,可以用来把其他重量不超过其最大起重量的吊车吊到同一栋楼顶。吊车一旦被运到某栋楼顶,就不能再转移到其他楼上。

现在有若干栋正在施工的建筑。每栋建筑都要求最终在楼顶拥有一台能够吊起指定重量的吊车。请把现有吊车分配给各栋建筑,并为每栋建筑给出吊车被依次运上楼顶的顺序。

每台吊车最多只能使用一次。

输入格式

第一行包含一个整数 NN1N1001\le N\le 100),表示可用吊车的数量。

接下来 NN 行,第 ii 行包含两个整数 Wi,LiW_i,L_i0Wi,Li1060\le W_i,L_i\le 10^6):

  • WiW_i 表示第 ii 台吊车的重量;
  • LiL_i 表示第 ii 台吊车的最大起重量。

随后一行包含一个整数 MM1M1001\le M\le 100),表示建筑数量。

最后一行包含 MM 个整数 T1,T2,,TMT_1,T_2,\ldots,T_M1Ti1061\le T_i\le 10^6),其中 TiT_i 表示第 ii 栋建筑最终需要从楼顶吊起的重量。

输出格式

若无法满足所有建筑的要求,输出:

impossible

否则输出 MM 行。第 ii 行输出若干个以空格分隔的整数

x1,x2,,xk,x_1,x_2,\ldots,x_k,

表示应当按照该顺序把编号为 x1,x2,,xkx_1,x_2,\ldots,x_k 的吊车运到第 ii 栋楼顶。

输出序列必须满足:

  • 第一台吊车的重量为 00,因此可以直接被带上楼顶;
  • 对于每个 j2j\ge 2,在它之前已经运上楼顶的吊车中,必须存在一台最大起重量不少于 WxjW_{x_j} 的吊车;
  • 最终楼顶至少有一台吊车的最大起重量不少于 TiT_i
  • 任意一台吊车不能出现在两栋不同建筑的序列中,也不能在同一序列中重复出现。

合法方案可能不唯一,因此本题需要 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