원형 셀룰러 오토마톤
시간 제한1초메모리 제한128 MB
원형으로 배열된 n개의 셀에 대해 d-환경 합을 m으로 나눈 나머지로 갱신하는 연산을 k번 반복한 결과를, 다항식 거듭제곱이나 행렬 거듭제곱으로 효율적으로 계산합니다.
문제
셀룰러 오토마톤은 정해진 형태의 격자 위에 놓인 셀들의 모임으로, 이웃한 셀들의 상태로부터 각 셀의 새로운 상태를 정하는 규칙에 따라 여러 번의 이산적인 시간 단계를 거치며 변화한다. 셀룰러 오토마톤의 차수(order) 는 그것이 가진 셀의 개수이며, 차수가 인 오토마톤의 셀에는 부터 까지 번호를 매긴다.
셀의 차수 는 그 셀이 가질 수 있는 서로 다른 값의 개수이다. 차수가 인 셀의 값은 이상 이하의 정수이다.
셀룰러 오토마톤의 가장 근본적인 성질 중 하나는 그것이 놓인 격자의 종류이다. 이 문제에서는 특별한 종류, 즉 셀의 차수가 이고 차수가 인 원형 셀룰러 오토마톤을 다룬다. 이를 -오토마톤이라 부른다.
-오토마톤에서 셀 와 셀 사이의 거리는 로 정의한다. 어떤 셀의 -이웃(-environment)이란 그 셀과의 거리가 이하인 모든 셀의 집합이다.
매 -스텝 마다 모든 셀의 값이 동시에 새 값으로 바뀐다. 셀 의 새 값은 셀 의 -이웃에 속하는 셀들의 값의 합을 으로 나눈 나머지이다.
번의 -스텝을 거친 뒤 -오토마톤의 상태를 구하여라.
입력
첫째 줄에 네 정수 , , , 가 주어진다 (, , , ). 둘째 줄에는 이상 이하의 정수 개가 주어지며, 이는 오토마톤 셀들의 초기 값이다.
출력
번의 -스텝을 거친 뒤 -오토마톤의 각 셀의 값을 한 줄에 공백 하나로 구분하여 출력한다.