슬레이트 모던 (스몰)

모서리를 공유하는 칸의 밝기 차이가 D 이하라는 조건에서, 일부 칸이 채워진 R×C 격자를 양의 정수로 채울 수 있는지 판정하고, 가능하면 전체 합의 최댓값을 10^9+7로 나눈 나머지를 구한다.

보통7그래프최단 경로수학구현아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

슬레이트 모던 화랑은 규칙이 엄격한 무채색 회화만 전시한다. 이 화랑에 걸리는 그림은 RRCC열 격자여야 하고, 각 칸은 양의 정수 밝기 값으로 칠한다. 그림이 너무 튀지 않도록, 변을 맞댄 두 칸(꼭짓점만 닿는 경우는 세지 않는다)의 밝기 값 차이는 DD 이하여야 한다.

화가인 친구 코디 자말은 이 화랑에 낼 그림을 그리고 있다. 어젯밤에 영감을 받아 서로 다른 NN개의 칸을 양의 정수 밝기 값으로 칠해 두었다. 화랑의 규칙은 오늘에서야 들었다. 코디 자말은 남은 칸을 모두 양의 정수 밝기 값으로 채워서 규칙을 어기지 않고 그림을 완성할 수 있는지 알고 싶어 한다. 완성할 수 있다면 검은 물감을 아끼려고 밝기 값의 합을 최대로 만들고 싶어 한다. 그 합을 구하거나, 완성이 불가능하다고 판정하라. 합이 매우 커질 수 있으므로 소수 109+710^9+7로 나눈 나머지를 출력한다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다. 각 테스트 케이스의 첫째 줄에는 네 정수 RR, CC, NN, DD가 주어진다. 이어지는 NN개의 줄 중 ii번째 줄에는 세 정수 RiR_i, CiC_i, BiB_i가 주어지며, 격자의 RiR_iCiC_i열 칸의 밝기 값이 BiB_i라는 뜻이다. 행과 열 번호는 1부터 시작한다.

제한

  • 1T1001 \le T \le 100
  • 1R2001 \le R \le 200
  • 1C2001 \le C \le 200
  • 1N2001 \le N \le 200
  • 1D1091 \le D \le 10^9
  • 모든 ii에 대해 1RiR1 \le R_i \le R, 1CiC1 \le C_i \le C
  • 모든 ii에 대해 1Bi1091 \le B_i \le 10^9. 이 상한은 코디 자말이 이미 칠한 칸에만 적용된다. 나머지 칸에는 10910^9보다 큰 밝기 값을 배정해도 된다.
  • N<R×CN < R \times C, 즉 빈 칸이 적어도 하나 있다.
  • iji \ne j이면 RiRjR_i \ne R_j 또는 CiCjC_i \ne C_j이다. 즉 미리 칠한 칸은 모두 서로 다르다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 그림을 완성할 수 없으면 IMPOSSIBLE, 완성할 수 있으면 밝기 값 전체 합을 소수 109+710^9+7로 나눈 나머지이다.

힌트

첫 번째 테스트 케이스에서 그림을 완성하는 가장 좋은 방법은 다음과 같고, 합은 40이다.

6 7 9
4 6 8

두 번째 테스트 케이스에서 가장 좋은 방법은 2000000000 1000000000이고 합은 3000000000이다. 109+710^9+7로 나눈 나머지는 999999986이다.

세 번째 테스트 케이스는 불가능하다. 2행의 칸에 어떤 값을 넣어도 이웃한 두 칸 중 적어도 하나와 차이가 너무 커진다.

네 번째 테스트 케이스는 코디 자말이 이미 칠한 두 칸의 밝기 값 차이가 너무 커서 그림을 이어 그릴 수 없다.