모든 크기의 직사각형을 포함한 서로 다른 숫자의 개수별로 세고, 그 개수들로 만든 곱을 1e9+7로 나눈 나머지를 출력한다.
어려움8구현비트 연산누적 합완전 탐색아직 제출이 없습니다시간 제한3초메모리 제한256 MBN×M 크기의 격자판이 있다. 각 칸에는 1 이상 K 이하의 숫자가 하나씩 적혀 있다. i행 j열 (1≤i≤N, 1≤j≤M)의 칸을 (i,j)로 나타낸다.
직사각형은 1≤x1≤x2≤N, 1≤y1≤y2≤M을 만족하는 네 정수 x1, y1, x2, y2로 정해지고, x1≤x≤x2와 y1≤y≤y2를 만족하는 모든 칸 (x,y)를 모은 것이다. 이 직사각형의 크기는 (x2−x1+1)×(y2−y1+1)이다. 네 값 [x1,y1,x2,y2]가 다르면 서로 다른 직사각형이다.
격자판 안에서 정확히 k종류의 숫자가 적혀 있고 크기가 n×m인 직사각형의 개수를 Ck,n,m이라 하자. 모든 Ck,n,m을 구하는 프로그램을 작성하라.
예를 들어 N=M=K=3이고 숫자가 다음 그림과 같이 적혀 있다고 하자.

x1=2, y1=1, x2=3, y2=2이면 네 칸 (2,1), (2,2), (3,1), (3,2)가 한 직사각형에 속한다. 이 직사각형만 떼어 적으면 다음과 같다.

이 직사각형에는 1과 2만 있으므로 두 종류의 숫자가 쓰인 직사각형이다.
입력은 하나의 테스트 케이스로 이루어진다.
첫째 줄에 세 정수 N, M, K (1≤N,M≤512, 1≤K≤9)가 공백으로 구분되어 주어진다.
둘째 줄부터 N개의 줄에 걸쳐 격자판의 각 줄에 적힌 숫자 M개가 공백 없이 주어진다. 각 숫자는 1 이상 K 이하이다.
모든 Ck,n,m을 출력하기에는 시간이 너무 오래 걸린다. 첫째 줄에 다음 값을 1000000007로 나눈 나머지를 출력한다.
∏k=1K∏n=1N∏m=1M(Ck,n,m+k×n×m)