직육면체 나누기

A x B x C 크기의 직육면체에서 N개의 단위 정육면체를 제거한 뒤 남은 정육면체들이 면을 공유해 이루는 연결 요소의 개수를 센다. 상자 크기는 최대 10^6이지만 N은 20000 이하다.

어려움8그래프BFSDFS해시맵아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

파블로 큐바슨은 큐비즘 작가다. 이번 작품은 단위 정육면체 A×B×CA \times B \times C개로 이루어진 직육면체를 깎아서 만든다. 그는 이 직육면체에서 단위 정육면체 NN개를 빼내 원하는 형태를 만들 계획이다. 작업을 시작하려던 참에, 정육면체를 빼내면 남은 부분이 서로 맞닿지 않는 여러 덩어리로 갈라질 수 있다는 사실을 알아차렸다. 작품이 여러 덩어리로 갈라지는 것은 그의 미의식에 어긋나므로, 계획대로 빼냈을 때 덩어리가 몇 개 생기는지 알고 싶어 한다.

정육면체 NN개를 빼낸 뒤 남은 단위 정육면체가 이루는 연결 요소의 개수를 구하라. 두 정육면체는 한 면을 맞대고 있을 때 서로 연결되어 있다.

입력

입력은 테스트 케이스 하나로 이루어지며, 형식은 다음과 같다.

A B C N
X1 Y1 Z1
...
XN YN ZN

첫째 줄에 정수 AA, BB, CC, NN이 주어진다. AA, BB, CC (1A,B,C1061 \le A, B, C \le 10^6)는 직육면체의 크기로, 폭은 왼쪽에서 오른쪽으로 AA, 높이는 아래에서 위로 BB, 깊이는 앞에서 뒤로 CC이다. NN (0N200000 \le N \le 20000, NA×B×C1N \le A \times B \times C - 1)은 빼낼 정육면체의 개수다.

다음 NN개의 줄에는 각각 정수 XiX_i (0XiA10 \le X_i \le A-1), YiY_i (0YiB10 \le Y_i \le B-1), ZiZ_i (0ZiC10 \le Z_i \le C-1)가 주어진다. 왼쪽에서 XiX_i칸, 아래에서 YiY_i칸, 앞에서 ZiZ_i칸 떨어진 자리의 정육면체를 빼낸다는 뜻이다. 좌표는 0부터 센다. 주어지는 위치는 모두 서로 다르다.

출력

정육면체를 빼내고 남은 부분의 연결 요소 개수를 한 줄에 출력한다.