1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| # 더 많은 정보는 42jerrykim.github.io 에서 확인하세요.
import sys
from functools import lru_cache
sys.setrecursionlimit(1_000_000)
MOD = 9901
def solve():
data = sys.stdin.read().strip().split()
if not data:
return
N, M = map(int, data[:2])
H, W = (N, M) if N >= M else (M, N)
if (H * W) % 2 == 1:
print(0)
return
@lru_cache(None)
def dfs(pos: int, mask: int) -> int:
if pos == H * W:
return 1 if mask == 0 else 0
r, c = divmod(pos, W)
if mask & 1:
return dfs(pos + 1, mask >> 1)
total = 0
if c + 1 < W and (mask & 2) == 0:
total += dfs(pos + 1, (mask >> 1) | 1)
if r + 1 < H:
total += dfs(pos + 1, (mask >> 1) | (1 << (W - 1)))
return total % MOD
print(dfs(0, 0) % MOD)
if __name__ == "__main__":
solve()
|