나이츠브리지의 크레인

각 건물의 꼭대기에서 최종 양중 능력이 목표 이상이 되도록 크레인을 배치하되, 출력을 사전순으로 가장 작게 만드는 계획을 구한다.

보통7그리디정렬동적 계획법구현아직 제출이 없습니다시간 제한4초메모리 제한512 MB

문제

나이츠브리지의 고층 건물은 크레인으로 짓는다. 크레인을 땅에 세우려면 건물만큼 높은 크레인이 필요하니, 현장에서는 더 작은 크레인을 탑 위에 올려서 쓴다. 그러면 다음 문제가 생긴다. 그 크레인을 어떻게 꼭대기까지 올리는가. 답은 더 작은 크레인으로 들어 올리는 것이다. 그 작은 크레인마저 무거우면 더 작은 크레인이 그것을 들어 올린다. 이렇게 내려가면 기술자가 주머니에 넣어 들고 올라갈 만큼 가벼운 크레인에 닿는다.

크레인은 NN대가 있다. ii번 크레인의 무게는 WiW_i킬로그램이고, 들어 올릴 수 있는 최대 무게는 LiL_i킬로그램이다. 공사 중인 건물은 MM개이고, ii번 건물은 마지막에 꼭대기에 선 크레인이 TiT_i킬로그램을 들어 올리면 요구를 만족한다.

건물 하나에 적용되는 규칙은 다음과 같다.

  • 꼭대기에서 쓸 수 있는 인양 능력은 크레인이 하나도 없을 때 00이고, 크레인을 올린 뒤에는 맨 위에 선 크레인의 최대 인양 무게와 같다.
  • 무게가 WW인 크레인은 그 건물의 인양 능력이 WW 이상일 때만 올릴 수 있다. 무게가 00인 크레인은 주머니에 들어가므로 기술자가 들고 올라가고, 언제나 첫 크레인이 될 수 있다.
  • 올린 크레인이 새로 맨 위에 서므로 인양 능력은 그 크레인의 값으로 바뀐다.
  • 지금의 인양 능력을 키우지 못하는 크레인은 올리지 않는다. 그래서 한 건물에 올라간 크레인의 인양 능력은 아래에서 위로 갈수록 커진다.
  • 한 번 올린 크레인은 다시 옮기지 못한다. 크레인 한 대는 많아야 건물 하나에 쓰고, 쓰지 않고 남는 크레인이 있어도 된다.

모든 건물의 요구를 만족하는 계획을 구하라.

입력

  • 첫째 줄에 크레인의 대수 NN이 주어진다. (1N1001 \le N \le 100)
  • 다음 NN개 줄에 ii번 크레인의 무게 WiW_i와 최대 인양 무게 LiL_i가 공백을 사이에 두고 주어진다. 단위는 킬로그램이다. (0Wi,Li1060 \le W_i, L_i \le 10^6)
  • 다음 줄에 건물의 개수 MM이 주어진다. (1M1001 \le M \le 100)
  • 마지막 줄에 MM개의 정수 T1,T2,,TMT_1, T_2, \dots, T_M이 공백을 사이에 두고 주어진다. (1Ti1061 \le T_i \le 10^6)

출력

모든 건물의 요구를 만족시킬 수 없으면 impossible을 출력한다.

만족시킬 수 있으면 MM개의 줄을 출력한다. ii번째 줄에는 ii번 건물에 올리는 크레인의 번호를 올리는 순서대로 공백을 사이에 두고 출력한다.

요구를 만족하는 계획은 여러 개일 수 있다. 그중 다음 기준으로 가장 작은 계획을 출력한다. 먼저 두 계획의 첫째 줄을 정수의 나열로 비교한다. 처음으로 서로 다른 자리에서 수가 작은 쪽이 작고, 그 자리까지 수가 모두 같은데 한쪽이 먼저 끝나면 짧은 쪽이 작다. 첫째 줄이 같으면 둘째 줄을 같은 방법으로 비교하고, 그다음 줄도 같은 방법으로 계속 비교한다.