만드는 중입니다

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

직사각형 색칠

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

요약
N x M 격자에서 색칠된 각 칸의 변으로 인접한 색칠 칸 수가 짝수인 색칠 경우의 수를 센다.
난이도

보통10점 중 7점

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

문제

단위 정사각형으로 나누어진 N×MN \times M 크기의 직사각형이 있다. 다음 두 조건을 만족하도록 칸을 색칠하는 방법의 수를 구하는 프로그램을 작성하시오.

  • 모든 칸은 색칠되어 있거나 비어 있다.
  • 색칠된 칸마다 변을 맞대고 있는 칸 중에서 색칠된 칸의 개수가 짝수여야 한다.

빈 칸에는 아무 조건도 붙지 않는다. 한 칸도 색칠하지 않는 것도 한 가지 방법으로 센다.

아래 그림은 N=4N = 4, M=7M = 7인 경우의 예이다. 노란색은 색칠한 칸, 검은색은 빈 칸이다.

NN과 MM이 주어지면 색칠하는 방법의 수를 구한다.

입력

첫째 줄에 NN과 MM이 주어진다. (1≤N≤1001 \le N \le 100, 1≤M≤81 \le M \le 8)

출력

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

힌트

N=2N = 2, M=2M = 2인 경우에는 아래 8가지 방법이 가능하다.

예제4

  1. 예제 1

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

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

    입력
    1 3
    
    예상 출력
    5
    
  4. 예제 4

    입력
    47 7
    
    예상 출력
    944149920