직사각형의 개수

모든 크기의 직사각형을 포함한 서로 다른 숫자의 개수별로 세고, 그 개수들로 만든 곱을 1e9+7로 나눈 나머지를 출력한다.

어려움8구현비트 연산누적 합완전 탐색아직 제출이 없습니다시간 제한3초메모리 제한256 MB

문제

N×MN \times M 크기의 격자판이 있다. 각 칸에는 1 이상 KK 이하의 숫자가 하나씩 적혀 있다. iijj열 (1iN1 \le i \le N, 1jM1 \le j \le M)의 칸을 (i,j)(i, j)로 나타낸다.

직사각형은 1x1x2N1 \le x_1 \le x_2 \le N, 1y1y2M1 \le y_1 \le y_2 \le M을 만족하는 네 정수 x1x_1, y1y_1, x2x_2, y2y_2로 정해지고, x1xx2x_1 \le x \le x_2y1yy2y_1 \le y \le y_2를 만족하는 모든 칸 (x,y)(x, y)를 모은 것이다. 이 직사각형의 크기는 (x2x1+1)×(y2y1+1)(x_2 - x_1 + 1) \times (y_2 - y_1 + 1)이다. 네 값 [x1,y1,x2,y2][x_1, y_1, x_2, y_2]가 다르면 서로 다른 직사각형이다.

격자판 안에서 정확히 kk종류의 숫자가 적혀 있고 크기가 n×mn \times m인 직사각형의 개수를 Ck,n,mC_{k,n,m}이라 하자. 모든 Ck,n,mC_{k,n,m}을 구하는 프로그램을 작성하라.

예를 들어 N=M=K=3N = M = K = 3이고 숫자가 다음 그림과 같이 적혀 있다고 하자.

3 x 3 격자판 그림

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

떼어 낸 직사각형 그림

이 직사각형에는 1과 2만 있으므로 두 종류의 숫자가 쓰인 직사각형이다.

입력

입력은 하나의 테스트 케이스로 이루어진다.

첫째 줄에 세 정수 NN, MM, KK (1N,M5121 \le N, M \le 512, 1K91 \le K \le 9)가 공백으로 구분되어 주어진다.

둘째 줄부터 NN개의 줄에 걸쳐 격자판의 각 줄에 적힌 숫자 MM개가 공백 없이 주어진다. 각 숫자는 1 이상 KK 이하이다.

출력

모든 Ck,n,mC_{k,n,m}을 출력하기에는 시간이 너무 오래 걸린다. 첫째 줄에 다음 값을 1000000007로 나눈 나머지를 출력한다.

k=1Kn=1Nm=1M(Ck,n,m+k×n×m)\prod_{k=1}^{K}\prod_{n=1}^{N}\prod_{m=1}^{M}\left(C_{k,n,m} + k \times n \times m\right)