만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

나이츠브리지의 크레인

시간 제한4초메모리 제한512 MB

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

보통10점 중 7점

유형
그리디, 정렬, 동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

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

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

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

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

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

입력

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

출력

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

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

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

예제3

  1. 예제 1

    입력
    5
    0 1
    1 2
    2 3
    3 4
    0 2
    2
    4 2
    
    예상 출력
    1 2 3 4
    5
    
  2. 예제 2

    입력
    7
    0 1
    1 4
    0 3
    0 1
    2 5
    2 5
    1 2
    3
    5 4 5
    
    예상 출력
    1 7 5
    4 2
    3 6
    
  3. 예제 3

    입력
    2
    0 1
    5 3
    2
    2 1
    
    예상 출력
    impossible