준혁이는 지난 학기부터 자취를 시작했다. 한 학기 동안 자취를 한 준혁이는 여름이 되자 자취방에 있는 N개의 창문으로 들어오는 햇살이 너무 강하고 더워 창문을 꾸며 여름을 견디기로 했다.
준혁이는 자취 마스터인 동우에게 도움을 요청했고, 동우는 후배의 부탁인 만큼 본인이 연구한 창문에 대한 정보를 알려주기로 했다. 동우는 대학교에서 선형대수를 배우는 과목을 무려 5개나 수강하였을 정도로 선형대수를 좋아하기 때문에 창문 역시 행렬로 분석하였다. 동우는 창문을 알기 위해 먼저 행렬 곱과 텐서 곱에 대한 이해가 필요하다고 했다.
행렬 X의 i행 j열을 x_i,j로 표기한다. 즉, 같은 알파벳 소문자에 아래첨자를 붙인다.
행렬 곱
텐서 곱(⊗)
벡터에서의 텐서 곱
각 창문은 순서가 정해진 M개의 2차원 벡터로 표현할 수 있다. 준혁이의 방을 둘러보던 동우는 방에 존재하는 N개의 창문이 현재는 각각 M개의 \left\[ \begin{matrix}1\\\ 2\end{matrix} \right]으로 이루어져 있음을 알아냈다. 또한 창문은 해당 벡터들에 의해 결정되는 “채광도”가 존재해 이 값에 따라 창문을 통해 들어오는 햇빛의 양을 조절할 수 있다는 것을 알려주었다. 채광도는 2M차원의 벡터로서 결정되는데, 창문을 구성하는 M개의 2차원 벡터들을 순서대로 텐서 곱한 것으로 정의된다. 즉, 각 창문을 구성하는 M개의 벡터가 V_1, V_2, ⋯, V_m이고, V\_i=\left\[ \begin{matrix}V\_{1i}\\\ V\_{2i}\end{matrix} \right]라고 하면(위에서 서술한 일반적인 행렬 표기법과 다르다는 점에 유의하자), 창문의 채광도 L=V_1⊗V_2⊗V_3⊗⋯⊗V_M으로 정의된다.
또한, 채광도를 조정하기 위해 인부를 부를 수 있는데, 각 인부는 순서가 정해진 M개의 2×2차원 행렬로 표현할 수 있다. 이때의 행렬은 다음 네 개 \left\[ \begin{matrix}1& 0\\\ 0& 1\end{matrix} \right], \left\[ \begin{matrix}0& 1\\\ 1& 0\end{matrix} \right], \left\[ \begin{matrix}0& 1\\\ -1& 0\end{matrix} \right], \left\[ \begin{matrix}1& 0\\\ 0& -1\end{matrix} \right] 중 하나다. 인부는 각각 인부의 “특성”을 가지고 있는데, 인부의 특성은 M개의 인부를 표현하는 행렬들을 순서대로 텐서 곱한 2M×2M차원의 행렬로 정의된다.
총 K일 동안, 날짜마다 꾸밀 수 있는 창문들이 존재한다. 준혁이는 날마다 한 명의 인부를 불러 꾸밀 수 있는 창문 전부를 꾸밀 것이다. 인부는 해당 날짜에 꾸밀 수 있는 창문은 반드시 모두 꾸며야 하고, 그렇지 않은 창문은 꾸미지 못한다.
인부가 작업을 한 창문에 대해, 해당 창문의 채광도는 인부의 특성을 나타내는 2M×2M차원 행렬과 창문의 기존 채광도를 나타내는 2M차원 벡터의 행렬 곱으로 바뀌게 된다.
또한 마지막 인부까지 작업을 마친 후 준혁이는 N개의 창문 채광도 각각에 대해 −1을 곱하거나 곱하지 않을 수 있다.
준혁이가 원하는 N개 창문의 채광도가 주어질 때, 최종적으로 모든 창문의 채광도를 원하는 대로 같게 하도록 날짜별 인부를 결정하는 방법의 수를 구하라. 인부는 인부를 구성하는 행렬의 종류 혹은 순서가 하나라도 다르면 다른 것으로 생각하고, 모든 행렬의 종류와 순서가 같으면 같은 인부이다. 또한, K일 동안 부른 인부 혹은 순서가 다르면 방법이 다른 것으로 생각해 각각 한 번씩 센다.
인부는 가능한 모든 행렬의 조합에 대해 존재하고, 같은 인부가 중복되어도 상관없다.
첫째 줄에 N, M, K가 공백으로 구분되어 주어진다. (1≤N≤1,000, 1≤M≤1,000, 1≤K≤1,000)
다음 N개의 줄에 1번째부터 N번째 창문에 대해 한 줄에 하나씩 준혁이가 최종적으로 원하는 창문의 채광도 V_11, V_12, ..., V_M1, V\_{M2}$$(-1\\, 000\le V\_{ij}\le 1\\, 000)가 공백으로 구분되어 주어진다.
다음 K줄에 한 줄에 하나씩 1일부터 K일까지 꾸밀 수 있는 창문의 종류가 다음과 같은 형식으로 공백으로 구분되어 주어진다.
준혁이가 원하는 창문의 상태를 달성하도록 날짜별 인부를 결정하는 방법의 수를 109+7로 나눈 나머지를 출력한다.