행렬의 텐서곱
시간 제한3초메모리 제한128 MB
양의 정수 행렬이 주어질 때, 어느 쪽도 1×1이 아닌 행렬 A, B의 텐서곱 A ⊗ B로 나타내는 서로 다른 방법의 수를 센다.
문제
두 행렬을 곱하는 또 다른 방법으로 텐서곱(크로네커 곱)이 있다.
크기가 인 행렬 와 크기가 인 행렬 를 생각하자. 단, 와 는 모두 행렬이 아니다.
와 의 텐서곱 는 크기가 인 행렬로, 의 각 원소 를 블록 로 바꾸어 얻는다.
예를 들면 다음과 같다.
일반적인 행렬의 곱과 달리, 와 이 같아야 한다는 조건은 없다.
행렬 하나가 주어졌을 때, 이 행렬을 텐서곱 로 나타내는 서로 다른 방법의 수를 구하는 프로그램을 작성하시오. 여기서 와 는 모든 원소가 양의 정수인 행렬이며, 둘 다 행렬이 아니다. 두 방법은 행렬 또는 행렬 가 (크기가 다르거나 어떤 원소가 다르거나 하여) 서로 다를 때 다른 것으로 센다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다.
각 테스트 케이스의 첫째 줄에는 행렬의 크기 과 가 주어진다. 이어지는 개의 줄에는 각 줄마다 행렬의 한 행을 이루는 개의 정수가 주어진다.
과 는 이하이고, 행렬의 각 원소는 이상 이하의 정수이다.
입력의 마지막 줄에는 이 두 개 주어지며, 이는 입력의 끝을 의미한다.
출력
각 테스트 케이스마다, 입력으로 주어진 행렬을 텐서곱 로 나타내는 서로 다른 방법의 수를 한 줄에 하나씩 출력한다.