만드는 중입니다

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

쿠키 배열

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

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

어려움10점 중 8점

유형
동적 계획법, 행렬, 조합론
정답자
아직 제출이 없습니다

문제

데브베이커리에서는 오늘도 쿠키를 굽는다. 오늘 굽는 쿠키는 두 종류뿐이다. 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 모양으로 놓을 수도 있다.

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

입력

첫째 줄에 NN과 KK가 주어진다. (1≤N≤10181 \le N \le 10^{18}, 0≤K≤10000 \le K \le 1000)

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

출력

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

예제2

  1. 예제 1

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

    입력
    1 1
    1 3
    
    예상 출력
    1