텐트
시간 제한2초메모리 제한512 MB
H×W 격자에서 각 행과 열의 입구 방향 규칙을 만족하도록 텐트를 하나 이상 배치하는 경우의 수를 1e9+7로 나눈 나머지를 구한다.
문제
JOI군은 캠핑장을 운영한다. 이 캠핑장은 H개의 행과 W개의 열로 이루어진 직사각형 격자로 나뉜다. 행은 동서 방향과 평행하고, 열은 남북 방향과 평행하다. 북쪽에서 i번째 행과 동쪽에서 j번째 열이 만나는 구역을 구역 (i, j)라고 한다.
JOI군은 몇몇 구역에 텐트를 세우려고 한다. 텐트 하나는 정확히 한 구역을 차지해야 한다. 두 텐트가 같은 구역을 차지할 수 없다.
각 텐트에는 북쪽, 남쪽, 동쪽, 서쪽 중 한 방향을 향하는 출입구가 하나씩 있다. 캠핑장에 세운 텐트들의 출입구 방향은 다음 조건을 만족해야 한다.
- 두 구역 (i1, j)와 (i2, j) (1 ≤ i1 < i2 ≤ H, 1 ≤ j ≤ W)에 모두 텐트가 있다면, 구역 (i1, j)의 텐트 출입구는 남쪽을 향해야 하고, 구역 (i2, j)의 텐트 출입구는 북쪽을 향해야 한다.
- 두 구역 (i, j1)과 (i, j2) (1 ≤ i1 < i2 ≤ H, 1 ≤ j ≤ W)에 모두 텐트가 있다면, 구역 (i, j1)의 텐트 출입구는 동쪽을 향해야 하고, 구역 (i, j2)의 텐트 출입구는 서쪽을 향해야 한다.
JOI군은 캠핑장에 텐트를 하나 이상 세우는 방법의 수가 궁금해졌다. 어떤 구역의 텐트 상태(텐트의 유무 또는 텐트 출입구의 방향)가 다르면 서로 다른 방법으로 본다.
문제에서 설명한 조건을 만족하도록 텐트를 하나 이상 세우는 방법의 수를 1 000 000 007로 나눈 나머지를 구하는 프로그램을 작성하라.
입력
표준 입력에서 다음 데이터를 읽는다.
- 첫째 줄에 두 정수 H와 W가 주어진다. 이는 JOI군이 운영하는 캠핑장이 H개의 행과 W개의 열로 나뉜다는 뜻이다.
출력
표준 출력에 한 줄을 출력한다. 문제에서 설명한 조건을 만족하도록 텐트를 하나 이상 세우는 방법의 수를 1 000 000 007로 나눈 나머지를 출력해야 한다.
제한
- 1 ≤ H ≤ 3 000.
- 1 ≤ W ≤ 3 000.