만드는 중입니다

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

보스의 강도 낮추기

시간 제한1.5초메모리 제한1024 MB

요약
N을 0으로 만드는 스펠 사용 순서의 개수를 구합니다. 스펠 i는 a_i를 빼며, N이 2^b_i로 나누어떨어질 때만 쓸 수 있습니다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 수학
정답자
아직 제출이 없습니다

문제

열성 게이머 Fulano는 온라인 게임 "Boss Challenge"에서 어려운 도전 과제를 만났다. 목표는 고대 룬 문자로 강도가 표시된 강력한 보스를 쓰러뜨리는 것이다. 룬 문자는 거대한 이진수 NN을 나타내며, 이 수가 적의 전체 강도다.

보스를 쓰러뜨리기 위해 Fulano에게는 MM가지 서로 다른 주문이 있다. 목표는 이 주문들을 사용해 적의 전체 강도를 0까지 줄이는 것이다. ii번째 주문은 두 정수 aia_i와 bib_i로 주어진다. 주문을 사용하면 NN의 값이 aia_i만큼 줄어든다. 주문은 두 조건을 모두 만족하는 동안 원하는 만큼 몇 번이고 쓸 수 있다.

  • aia_i는 NN의 현재 값보다 작거나 같아야 한다.
  • NN의 현재 값은 2bi2^{b_i}로 나누어떨어져야 한다. 즉, NN의 마지막 bib_i자리가 모두 0일 때만 주문 ii를 쓸 수 있다.

Fulano는 주문을 조합해 이진수 NN을 정확히 0으로 만드는 방법이 몇 가지인지 알고 싶어 한다. 주문을 사용하는 순서가 다르면 서로 다른 조합으로 본다.

조합의 수가 매우 클 수 있으므로, 답은 109+710^9 + 7로 나눈 나머지로 출력한다.

Fulano가 답을 찾도록 도와주자.

입력

첫 번째 줄에 보스의 강도를 나타내는 정수 NN (1≤N≤10181 \le N \le 10^{18})이 주어진다.

두 번째 줄에 주문의 개수 MM (1≤M≤1051 \le M \le 10^5)이 주어진다.

이어지는 MM개의 줄에는 각각 두 정수 aia_i (1≤ai≤1001 \le a_i \le 100)와 bib_i (0≤bi≤600 \le b_i \le 60)가 주어진다.

출력

주문을 사용해 보스의 강도를 NN에서 00으로 줄이는 서로 다른 순서의 개수를 109+710^9 + 7로 나눈 나머지로 출력한다.

예제2

  1. 예제 1

    입력
    6 2
    1 0
    2 1
    
    예상 출력
    8
    
  2. 예제 2

    입력
    9 5
    1 0
    1 1
    4 3
    1 1
    8 0
    
    예상 출력
    92