쿠키 배열

1x1 쿠키 K개의 위치가 고정된 N행 5열 격자를 2x1 도미노로 채우는 경우의 수를 1e9+7로 나눈 나머지를 구한다. N은 1e18까지 커서 행렬 거듭제곱이 필요하다.

어려움8동적 계획법행렬조합론아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

데브베이커리에서는 오늘도 쿠키를 굽는다. 오늘 굽는 쿠키는 두 종류뿐이다. 2×12 \times 1 크기의 명랑한 쿠키양, 그리고 1×11 \times 1 크기의 용감한 쿠키군의 머리다.

쿠키는 항상 NN개의 행과 55개의 열로 이루어진 N×5N \times 5 판에 굽는다. 1×11 \times 1 쿠키는 정확히 KK개를 굽고, 그 위치는 미리 정해져 있다. 1×11 \times 1 쿠키를 모두 놓은 다음, 남은 칸을 2×12 \times 1 쿠키로 빈틈없이 채운다. 2×12 \times 1 쿠키는 돌려서 1×21 \times 2 모양으로 놓을 수도 있다.

NNKK, 그리고 1×11 \times 1 쿠키의 위치가 주어질 때 2×12 \times 1 쿠키를 배치하는 경우의 수를 구하여라. 같은 크기의 쿠키끼리는 구별하지 않으므로, 두 배치가 다르다는 것은 어떤 2×12 \times 1 쿠키가 덮는 두 칸의 짝이 다르다는 뜻이다. 남은 칸을 2×12 \times 1 쿠키로 빈틈없이 채울 수 없으면 경우의 수는 00이다.

입력

첫째 줄에 NNKK가 주어진다. (1N10181 \le N \le 10^{18}, 0K10000 \le K \le 1000)

다음 KK개의 줄에 1×11 \times 1 쿠키의 위치가 두 정수 rrcc로 주어진다. rr은 행 번호, cc는 열 번호다. (1rN1 \le r \le N, 1c51 \le c \le 5) 같은 칸이 두 번 주어지지는 않는다.

출력

2×12 \times 1 쿠키를 배치하는 경우의 수를 1,000,000,0071{,}000{,}000{,}007로 나눈 나머지를 한 줄에 출력한다.