행렬 곱셈 계산기

행렬 두 개와 각 행렬의 크기를 여러 테스트 케이스로 입력받아, 안쪽 차원이 맞으면 곱셈 결과를 각 행을 세로 막대로 감싸 출력하고 맞지 않으면 undefined를 출력한다.

쉬움2구현행렬수학완전 탐색아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

행렬 곱셈은 선형대수학의 기본 연산으로, 수학의 각 분야와 응용수학, 컴퓨터 그래픽스, 물리학, 공학에서 널리 쓰인다.

두 행렬은 차원이 맞아떨어질 때에만 곱할 수 있다. 즉, 첫 번째 행렬의 열 개수가 두 번째 행렬의 행 개수와 같아야 한다.

A=[aij]A = [a_{ij}]m×nm \times n 행렬이고 B=[bij]B = [b_{ij}]n×qn \times q 행렬이면, 곱 ABABm×qm \times q 행렬이다. 곱 ABAB는 다음과 같이 정의되는 m×qm \times q 행렬 C=[cij]C = [c_{ij}]이다.

cij=k=1naikbkjc_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}

두 행렬을 곱한 결과를 출력하는 계산기를 만들어라. 두 행렬을 곱할 수 없으면 undefined를 출력한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 4개의 양의 정수 M,N,P,QM, N, P, Q가 주어진다 (1M,N,P,Q201 \le M, N, P, Q \le 20). MMNN은 행렬 AA의 크기, PPQQ는 행렬 BB의 크기이다. 이어서 MM줄에 행렬 AA의 원소가, 그 다음 PP줄에 행렬 BB의 원소가 주어진다. 각 행에는 해당 행의 원소들이 공백 하나로 구분되어 주어진다. M,N,P,QM, N, P, Q가 모두 00이면 입력의 끝이며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 첫 줄에 Case #x:를 출력한다. 여기서 xx11부터 시작하는 케이스 번호이다. 다음 줄부터 행렬 곱셈 결과를 출력한다. 곱할 수 있는 경우에는 결과 행렬의 각 행을 |로 감싸서 | 원소들 | 형태로 한 줄에 하나씩 출력하며, 원소 사이에는 공백 하나를 둔다. 곱할 수 없는 경우에는 undefined 한 줄을 출력한다.