두 행렬을 곱하는 또 다른 방법으로 텐서곱(크로네커 곱)이 있다.
크기가 $p \times q$인 행렬 $A$와 크기가 $n \times m$인 행렬 $B$를 생각하자. 단, $A$와 $B$는 모두 $1 \times 1$ 행렬이 아니다.
$A$와 $B$의 텐서곱 $A \otimes B$는 크기가 $pn \times qm$인 행렬로, $A$의 각 원소 $a_{ij}$를 블록 $a_{ij} \cdot B$로 바꾸어 얻는다.
예를 들면 다음과 같다.
$$A = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix}, \qquad B = \begin{bmatrix} 0 & 5 \ 6 & 7 \end{bmatrix}$$
$$A \otimes B = \begin{bmatrix} 0 & 5 & 0 & 10 \ 6 & 7 & 12 & 14 \ 0 & 15 & 0 & 20 \ 18 & 21 & 24 & 28 \end{bmatrix}$$
일반적인 행렬의 곱과 달리, $q$와 $n$이 같아야 한다는 조건은 없다.
행렬 하나가 주어졌을 때, 이 행렬을 텐서곱 $A \otimes B$로 나타내는 서로 다른 방법의 수를 구하는 프로그램을 작성하시오. 여기서 $A$와 $B$는 모든 원소가 양의 정수인 행렬이며, 둘 다 $1 \times 1$ 행렬이 아니다. 두 방법은 행렬 $A$ 또는 행렬 $B$가 (크기가 다르거나 어떤 원소가 다르거나 하여) 서로 다를 때 다른 것으로 센다.
입력은 여러 개의 테스트 케이스로 이루어진다.
각 테스트 케이스의 첫째 줄에는 행렬의 크기 $r$과 $c$가 주어진다. 이어지는 $r$개의 줄에는 각 줄마다 행렬의 한 행을 이루는 $c$개의 정수가 주어진다.
$r$과 $c$는 $500$ 이하이고, 행렬의 각 원소는 $1$ 이상 $65536$ 이하의 정수이다.
입력의 마지막 줄에는 $0$이 두 개 주어지며, 이는 입력의 끝을 의미한다.
각 테스트 케이스마다, 입력으로 주어진 행렬을 텐서곱 $A \otimes B$로 나타내는 서로 다른 방법의 수를 한 줄에 하나씩 출력한다.