아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

금고

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

요약
소수 p에 대한 결합 행렬과 현재 노브, 볼트 위치가 주어질 때 모든 볼트를 0으로 만드는 노브 위치를 구한다.
난이도

보통10점 중 7점

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

문제

ByteGuy는 자물쇠가 달린 금고를 가지고 있습니다. 이 자물쇠에는 손잡이가 nn개 있고, 자물쇠 안에는 같은 개수인 빗장이 nn개 숨겨져 있습니다. 각 손잡이와 각 빗장은 00부터 p−1p-1까지 번호가 붙은 pp가지 위치 중 하나에 놓일 수 있으며, pp는 소수입니다.

모든 빗장이 위치 00에 놓이는 순간 자물쇠가 열립니다.

ii번 손잡이를 한 칸 돌리면(위치 00에서 11로, 11에서 22로, ..., p−1p-1에서 다시 00으로) jj번 빗장이 ci,jc_{i,j}칸만큼 돌아갑니다. 즉 jj번 빗장이 위치 ll에 있었다면 (l+ci,j) mod p(l + c_{i,j}) \bmod p로 이동합니다.

ByteGuy는 여는 방법을 잊어버렸습니다. 3D 스캐너로 숨겨진 모든 빗장의 현재 위치를 읽을 수 있고, 이 자물쇠는 정확히 하나의 손잡이 배열에서만 열리도록 만들어져 있습니다.

손잡이의 현재 위치, 빗장의 현재 위치, 그리고 각 ci,jc_{i,j} 값이 주어질 때 자물쇠를 여는 손잡이 배열을 출력하세요.

입력

첫째 줄에 정수 두 개가 주어집니다. 손잡이의 개수 nn (1≤n≤3001 \le n \le 300)과 위치의 개수인 소수 pp (3≤p≤400003 \le p \le 40000)입니다.

둘째 줄에는 0…p−10 \ldots p-1 범위의 정수 nn개가 주어지며, 각 손잡이의 현재 위치입니다.

셋째 줄에는 0…p−10 \ldots p-1 범위의 정수 nn개가 주어지며, 각 빗장의 현재 위치입니다.

이어지는 nn개의 줄은 각 손잡이를 설명합니다. ii번째 줄에는 정수 nn개 ci,0,ci,1,…,ci,n−1c_{i,0}, c_{i,1}, \ldots, c_{i,n-1}이 주어지며 0≤ci,j<p0 \le c_{i,j} < p입니다.

출력

0…p−10 \ldots p-1 범위의 정수 nn개를 공백 하나로 구분하여 한 줄에 출력합니다. 자물쇠를 여는 손잡이의 최종 위치입니다.

예제4

  1. 예제 1

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

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

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

    입력
    5 11
    7 4 10 1 5
    5 10 6 10 4
    1 0 0 0 0
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    0 0 0 0 1
    
    예상 출력
    2 5 4 2 1