만드는 중입니다

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

생명 게임

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

요약
육각형 격자의 바이러스 수를 주기마다 이웃 칸으로 퍼뜨리고 M으로 나눈 나머지를 취해, L주기 후의 전체 합을 구합니다.
난이도

보통10점 중 6점

유형
행렬, 수학
정답자
아직 제출이 없습니다

문제

당신은 생물 무기를 생산하는 공장에서 일한다. 당신이 맡은 것은 번식력이 매우 강한 끔찍한 바이러스 무기를 관리하는 일이다. 이 바이러스는 정육각형 모양의 군집을 규칙적으로 만드는 경향이 있어서, 무기 전체가 육각형 격자를 이루고 육각형 하나가 군집 하나에 해당한다. 격자는 각 변에 NN개의 군집이 있는 정육각형 모양이다. 바이러스는 일정한 속도로 자기 증식하며, 증식은 모든 군집에서 동시에 일어난다. 증식이 끝나면 각 군집은 이웃한 모든 군집에 같은 수의 바이러스를 새로 낳는다. 증식 후 한 군집의 바이러스 수가 한계 밀도 MM 이상이면, 그 군집의 바이러스는 자기 공격을 시작하고 바이러스 수는 MM으로 나눈 나머지로 줄어든다. 격자의 크기 NN과 각 군집의 초기 바이러스 수가 주어질 때, LL번의 주기가 지난 뒤 모든 군집의 바이러스 총수를 구하는 것이 과제다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 케이스는 세 정수 NN (1≤N≤61 \le N \le 6), MM (2≤M≤1092 \le M \le 10^9), LL (1≤L≤1091 \le L \le 10^9)이 적힌 줄로 시작한다. 이어지는 2N−12N-1개의 줄이 초기 상태를 나타낸다. 각 음이 아닌 정수는 MM보다 작으며, 해당 군집의 초기 바이러스 수이다. 첫 줄에는 맨 윗줄 NN개 군집의 바이러스 수를 왼쪽에서 오른쪽 순서로 주고, 둘째 줄에는 그다음 줄 N+1N+1개 군집의 값을 준다. 이런 방식으로 아래 줄까지 이어진다. 입력의 끝은 0 0 0이 적힌 줄로 표시된다.

출력

각 테스트 케이스마다 테스트 케이스 번호를 출력한 뒤, LL번의 주기가 지난 후 모든 군집의 바이러스 총수를 출력한다.

예제1

  1. 예제 1

    입력
    3 3 1
    1 0 0
    0 0 0 0
    0 0 0 0 0
    0 0 0 0
    0 0 1
    3 3 2
    1 0 0
    0 0 0 0
    0 0 0 0 0
    0 0 0 0
    0 0 1
    0 0 0
    
    예상 출력
    Case 1: 8
    Case 2: 18