만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

직사각형 색칠

시간 제한2초메모리 제한512 MB

요약
N x M 격자를 흑백으로 칠할 때 모든 X x Y 부분 직사각형이 두 색을 모두 포함하도록 하는 색칠의 수를 세는 문제이다.
난이도

어려움10점 중 8점

유형
동적 계획법, 조합론, 비트 연산
정답자
아직 제출이 없습니다

문제

1×11 \times 1 크기의 칸으로 나누어진 N×MN \times M 격자가 있다. 각 칸을 검은색이나 흰색으로 칠하려고 한다. 이때 세로 XX칸, 가로 YY칸짜리 직사각형이 한 가지 색으로만 칠해지면 안 된다. 즉 격자에서 잘라낸 모든 X×YX \times Y 직사각형은 검은 칸과 흰 칸을 적어도 하나씩 포함해야 한다.

조건을 만족하는 색칠 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN, MM, XX, YY가 공백으로 구분되어 주어진다. (1≤X≤31 \le X \le 3, 2≤Y≤M2 \le Y \le M)

NN과 MM의 범위는 XX에 따라 달라진다.

  • X=1X = 1인 경우: 2≤N≤1,000,0002 \le N \le 1{,}000{,}000, 2≤M≤1,0002 \le M \le 1{,}000
  • X=2X = 2인 경우: 2≤N≤1,000,0002 \le N \le 1{,}000{,}000, 2≤M≤72 \le M \le 7
  • X=3X = 3인 경우: 3≤N≤83 \le N \le 8, 2≤M≤52 \le M \le 5

출력

첫째 줄에 색칠 방법의 수를 1,000,000,007로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    2 2 1 2
    
    예상 출력
    4
    
  2. 예제 2

    입력
    3 3 2 2
    
    예상 출력
    322
    
  3. 예제 3

    입력
    3 4 1 3
    
    예상 출력
    1000