매머드에 맞서서

시간 제한1초메모리 제한128 MB

요약
각 인간 행성을 많아야 하나의 외계 행성에 배정하고 출발 연도를 정해, 도착 시 함대가 이기도록 하면서 마지막 외계 행성이 함락되는 연도를 최소화한다.
난이도

어려움10점 중 8점

유형
이분 탐색, 그리디, 정렬, 수학
정답자
아직 제출이 없습니다

문제

서기 3024년, 인류는 마침내 외계 종족에 맞설 기술을 손에 넣었다. 외계인의 방어 병기인 매머드에 필적하는 거대한 전함, 세이버투스(Saber Tooth) 함선을 만들 수 있게 된 것이다. 당시 인류와 외계인은 각각 여러 행성을 지배하고 있었고, 인류는 세이버투스 함선으로 역사상 최초의 행성 전쟁에서 승리했다. 여러분의 임무는 그 옛 전쟁을 시뮬레이션하여 몇 가지 역사적 가설을 검증하는 것이다.

각 인류 행성은 저마다 일정한 속도로 함선을 생산한다. 행성이 1년에 생산하는 함선 수를 그 행성의 생산률이라 한다. 또한 모든 행성은 시뮬레이션 시작 전에 이미 일정한 수의 함선을 보유한다. 연도를 00부터 센다고 할 때, 처음에 함선 nn대를 가지고 생산률이 pp인 행성은 11년 초에 n+pn + p대를, ii년 초에 n+i×pn + i \times p대를 보유한다.

총사령관 브래들리 베넷은 다음과 같은 전략을 세운다. 각 외계 행성마다 인류 행성 하나를 골라 함선을 생산하게 하고, 정해진 시점에 그 행성의 모든 함선을 보내 해당 외계 행성을 침공한다. 어떤 외계 행성도 두 인류 행성에게 공격받지 않으며, 어떤 인류 행성도 두 외계 행성을 공격하지 않는다.

각 외계 행성은 매머드로 방어한다. 처음에 일정한 수의 매머드를 보유하고 매년 자신의 생산률만큼 매머드를 늘리므로, ii년 초에는 (초기 매머드 수) + i×(생산률)+\, i \times (\text{생산률})마리의 매머드를 갖는다. 함선과 매머드가 맞붙으면 수가 더 많은 쪽이 이기며, 양쪽 수가 같으면 함선이 이긴다. 함선이 이기면 그 외계 행성은 파괴된다.

함선의 이동에는 시간이 걸린다. 모든 인류 행성과 외계 행성 사이의 이동 시간(정수 연 단위)이 주어진다. 함대는 오직 연도 초(그 해의 함선이 생산된 직후)에만 출발할 수 있고, 오직 연도 초(그 해의 매머드가 생산된 직후)에만 도착한다. 따라서 어떤 함대가 LL년 초에 인류 행성을 떠나고 이동 시간이 tt라면, 그 함대는 n+L×pn + L \times p대의 함선을 싣고 L+tL + t년 초에 도착하며 (초기 매머드 수) + (L+t)×(생산률)+\,(L + t) \times (\text{생산률})마리의 매머드와 마주한다.

예를 들어 초기 함선 22대, 생산률 33인 인류 행성이 초기 매머드 22마리, 생산률 22인 외계 행성을 공격한다고 하자. 이동 시간은 22년이고 함대는 11년에 출발하도록 명령받았다. 그러면 2+3×1=52 + 3 \times 1 = 5대가 출발하여 33년 초에 도착하고 2+2×3=82 + 2 \times 3 = 8마리의 매머드와 마주하므로 전멸한다.

베넷은 모든 외계 행성을 가능한 한 이른 시점에 파괴하는 계획을 원한다. 즉, 마지막 외계 행성이 파괴되는 연도를 최소화하려 한다. 그 가능한 가장 이른 연도를 출력하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 정수 HH와 AA가 주어진다. 각각 인류 행성과 외계 행성의 개수이며, 둘 다 11 이상 250250 이하이다.

둘째 줄에는 음이 아닌 정수 HH쌍 n1 m1 n2 m2…nH mHn_1\ m_1\ n_2\ m_2 \dots n_H\ m_H가 주어진다. nin_i는 ii번째 인류 행성의 초기 함선 수, mim_i는 그 행성의 생산률이다.

셋째 줄에는 같은 형식으로 음이 아닌 정수 AA쌍이 주어지며, 각 외계 행성의 초기 매머드 수와 생산률을 나타낸다.

그 다음 HH개의 줄이 이어지고 각 줄에는 양의 정수 AA개가 있다. ii번째 줄의 jj번째 수는 ii번째 인류 행성에서 jj번째 외계 행성까지의 이동 시간(연)이다.

입력은 두 개의 00이 적힌 줄로 끝난다. HH와 AA를 제외한 모든 수는 00 이상 4000040000 이하이다.

출력

각 테스트 케이스마다 한 줄에, 모든 외계 행성을 파괴할 수 있는 최소 연수를 출력하라. 모두 파괴하는 것이 불가능하면 대신 IMPOSSIBLE을 출력하라.

예제3

  1. 예제 1

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

    입력
    1 1
    10 1
    5 0
    3
    0 0
    
    예상 출력
    3
    
  3. 예제 3

    입력
    2 2
    5 3 0 3
    2 2 2 2
    2 5
    2 3
    0 0
    
    예상 출력
    11