만드는 중입니다

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

암호화 행렬

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

요약
N x N 행렬 세 개가 주어질 때, 두 행렬의 곱이 나머지 하나와 같아지는 모든 순서쌍을 찾고, 각 행렬이 평문, 암호화 행렬, 암호문 역할을 하는지에 따라 비트마스크 점수를 출력한다.
난이도

쉬움10점 중 3점

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

문제

N×NN \times N 행렬 세 개 A0, A1, A2A_0,\ A_1,\ A_2가 주어진다.

집합 A={A0, A1, A2}A = \{A_0,\ A_1,\ A_2\}라 하자. 이 집합에 포함된 세 행렬의 어떤 순열 XX, YY, ZZ가 XY=ZXY = Z라는 조건을 만족할 때, 각 행렬은 다음과 같은 특성을 갖는다고 하자.

  • XX: 평문
  • YY: 암호화 행렬
  • ZZ: 암호문

이때 S(Ai∣A)S(A_i | A)를 집합 AA에 속하는 원소 AiA_i의 특성들의 집합이라고 하자. (0≤i≤2)(0 \le i \le 2)

예를 들어, A0=(0001)A_0 = \left( \begin{matrix} 0 & 0 \\ 0 & 1 \end{matrix} \right), A1=(1000)A_1 = \left( \begin{matrix} 1 & 0 \\ 0 & 0 \end{matrix} \right), A2=(0000)A_2 = \left( \begin{matrix} 0 & 0 \\ 0 & 0 \end{matrix} \right), 그리고 A={A0, A1, A2}A = \{A_0,\ A_1,\ A_2\}라고 하자.

이때 A0A1=A2A_0A_1 = A_2, 그리고 A1A0=A2A_1A_0 = A_2이다.

따라서 S(A0∣A)={평문,암호화 행렬}S(A_0 | A) = \{\textbf{평문}, \textbf{암호화 행렬}\}, S(A1∣A)={평문,암호화 행렬}S(A_1 | A) = \{\textbf{평문}, \textbf{암호화 행렬}\}, S(A2∣A)={암호문}S(A_2 | A) = \{\textbf{암호문}\}임을 알 수 있다.

이제 f(Ai∣A)f(A_i | A) (0≤i≤2)(0 \le i \le 2)를 다음과 같이 정의하자.

f(Ai∣A)=1×[평문∈S(Ai∣A)]+2×[암호화 행렬∈S(Ai∣A)]+4×[암호문∈S(Ai∣A)]f(A_i | A) = 1 \times \left[\textbf{평문} \in S(A_i | A)\right] + 2 \times \left[\textbf{암호화 행렬} \in S(A_i | A)\right] + 4 \times \left[\textbf{암호문} \in S(A_i | A)\right]

여기서 [condition]={1if  condition0otherwise.[condition] = \begin{cases} 1 & \texttt{if}\ \ condition \\ 0 & \texttt{otherwise.} \end{cases}이다.

즉, 위의 예시에서

f(A0∣A)=(1×1)+(2×1)+(4×0)=3f(A_0 | A) = (1 \times 1) + (2 \times 1) + (4 \times 0) = 3,

f(A1∣A)=(1×1)+(2×1)+(4×0)=3f(A_1 | A) = (1 \times 1) + (2 \times 1) + (4 \times 0) = 3,

f(A2∣A)=(1×0)+(2×0)+(4×1)=4f(A_2 | A) = (1 \times 0) + (2 \times 0) + (4 \times 1) = 4이다.

세 개의 N×NN \times N 행렬 A0A_0, A1A_1, A2A_2가 주어진다. A={A0, A1, A2}A = \{A_0,\ A_1,\ A_2\}일 때, f(A0∣A), f(A1∣A),f(A2∣A)f(A_0 | A),\ f(A_1 | A), f(A_2 | A)를 구하는 프로그램을 작성하시오.

입력

첫 줄에는 정수 NN이 주어진다. (1≤N≤1 000)(1 \le N \le 1\,000)

다음 3N3N 줄에 걸쳐 세 행렬 A0A_0, A1A_1, A2A_2가 주어진다.

각 줄에는 NN개의 정수가 공백으로 구분되어 주어지며, 각 정수의 절댓값은 200200보다 작거나 같다.

출력

f(A0∣A)f(A_0 | A), f(A1∣A)f(A_1 | A), f(A2∣A)f(A_2 | A)를 한 줄에 하나씩 순서대로 출력한다.

예제3

  1. 예제 1

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

    입력
    2
    123 -123
    111 -111
    0 0
    0 0
    0 0
    0 0
    
    예상 출력
    3
    7
    7
    
  3. 예제 3

    입력
    3
    0 1 2
    0 0 0
    0 0 0
    0 0 0
    1 0 0
    2 0 0
    5 0 0
    0 0 0
    0 0 0
    
    예상 출력
    1
    2
    4