쿠키 배열
시간 제한2초메모리 제한256 MB
1x1 쿠키 K개의 위치가 고정된 N행 5열 격자를 2x1 도미노로 채우는 경우의 수를 1e9+7로 나눈 나머지를 구한다. N은 1e18까지 커서 행렬 거듭제곱이 필요하다.
문제
데브베이커리에서는 오늘도 쿠키를 굽는다. 오늘 굽는 쿠키는 두 종류뿐이다. 크기의 명랑한 쿠키양, 그리고 크기의 용감한 쿠키군의 머리다.
쿠키는 항상 개의 행과 개의 열로 이루어진 판에 굽는다. 쿠키는 정확히 개를 굽고, 그 위치는 미리 정해져 있다. 쿠키를 모두 놓은 다음, 남은 칸을 쿠키로 빈틈없이 채운다. 쿠키는 돌려서 모양으로 놓을 수도 있다.
과 , 그리고 쿠키의 위치가 주어질 때 쿠키를 배치하는 경우의 수를 구하여라. 같은 크기의 쿠키끼리는 구별하지 않으므로, 두 배치가 다르다는 것은 어떤 쿠키가 덮는 두 칸의 짝이 다르다는 뜻이다. 남은 칸을 쿠키로 빈틈없이 채울 수 없으면 경우의 수는 이다.
입력
첫째 줄에 과 가 주어진다. (, )
다음 개의 줄에 쿠키의 위치가 두 정수 과 로 주어진다. 은 행 번호, 는 열 번호다. (, ) 같은 칸이 두 번 주어지지는 않는다.
출력
쿠키를 배치하는 경우의 수를 로 나눈 나머지를 한 줄에 출력한다.