등산객 안전 거리

경로 위 마커에 서 있는 등산객들이 이웃 간 거리는 B 이하, 개인 공간은 서로 지키며 한 명씩 앞 마커로 이동해야 한다. 모두가 끝에 도달하는 사전순으로 가장 작은 이동 순서를 출력하고, 불가능하면 impossible을 출력한다.

어려움8그리디시뮬레이션구현아직 제출이 없습니다시간 제한4초메모리 제한512 MB

문제

한 산악회가 코스 하나에서 기록 경기를 연다. 코스에는 표지점이 PP개 있고, ii번 표지점은 출발점에서 did_i미터 떨어져 있으며 d1=0d_1 = 0이다. 이 종목에서 오래 걸리는 일은 길을 찾는 작업뿐이라, 다음에 어디로 갈지만 알면 이동 자체는 순식간에 끝난다.

지금 코스에는 등산객이 KK명 있다. ii번 등산객은 ViV_i번 표지점에 서 있고, 개인 공간으로 AiA_i미터가 필요하다. 어느 순간에나 다음 두 규칙이 성립한다.

  • 코스에서 이웃한 두 등산객, 즉 사이에 다른 등산객이 없는 두 사람의 거리는 BB미터 이하다.
  • ii번 등산객은 나머지 모두를 AiA_i미터 이상 떨어뜨려 놓는다. 따라서 ii번과 jj번의 거리는 max(Ai,Aj)\max(A_i, A_j) 이상이다.

등산객은 한 번에 한 명씩 움직인다. 한 번의 이동은 한 사람을 지금 서 있는 표지점에서 다음 표지점으로 옮기고 순식간에 끝나므로, 표지점 사이에 머무는 사람은 없다. 이동이 끝날 때마다 두 규칙이 다시 성립해야 한다.

PP번 표지점에 닿은 등산객은 코스를 완주하고 곧바로 빠져나간다. 그 순간부터 두 규칙은 그 사람을 무시하므로, PP번 표지점으로 가는 이동은 언제나 허용된다. 처음부터 PP번 표지점에 서 있는 등산객은 이미 완주한 상태이고 한 번도 움직이지 않는다.

모두가 코스를 완주하도록 움직이는 순서를 구하라.

입력

  • 첫째 줄에 정수 BB (1B500001 \le B \le 50000)가 주어진다. 이웃한 두 등산객 사이에 허용되는 가장 먼 거리다.
  • 둘째 줄에 표지점의 개수 PP (3P10003 \le P \le 1000)가 주어진다.
  • 셋째 줄에 정수 PPd1,d2,,dPd_1, d_2, \ldots, d_P (0=d1<d2<<dP1060 = d_1 < d_2 < \cdots < d_P \le 10^6)가 주어진다. 각 표지점의 출발점에서의 거리다.
  • 넷째 줄에 등산객의 수 KK (2K10002 \le K \le 1000)가 주어진다.
  • 이어지는 KK개 줄 중 ii번째 줄에 ii번 등산객의 개인 공간 AiA_i와 현재 표지점 번호 ViV_i가 공백으로 구분되어 주어진다 (1Ai1061 \le A_i \le 10^6, 1ViP1 \le V_i \le P). 등산객은 출발점에서 가까운 순서로 주어지므로 V1<V2<<VKV_1 < V_2 < \cdots < V_K이다.

처음 배치는 두 규칙을 모두 만족한다. PP번 표지점에서 시작하는 등산객은 이미 완주했으므로 이 판정에서 빠진다.

출력

규칙을 어기지 않고는 모든 등산객을 PP번 표지점까지 보낼 수 없으면 impossible을 출력한다.

보낼 수 있으면 움직이는 순서대로 등산객 번호를 한 줄에 공백 하나로 구분해 출력한다. 올바른 답의 길이는 항상 i=1K(PVi)\sum_{i=1}^{K} (P - V_i)로 같으니, 그중 사전순으로 가장 작은 답을 출력한다. 두 답은 앞에서부터 한 자리씩 비교하고, 처음으로 달라지는 자리의 번호가 작은 쪽이 사전순으로 앞선다.