아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

활동과잉 소년 강산이

시간 제한1초메모리 제한128 MB

요약
여러 테스트 케이스에서 [0, M]을 덮으면서 중복 구간이 없는 최소 구간 부분집합의 개수를 10^8로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

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

문제

활동을 좋아하는 강산이는 하루 중 단 한 순간이라도 쉬면 온몸에 가시가 돋아 고통을 받는다. 이렇게 24년을 살아온 강산이는 여러 개의 일을 동시에 진행할 수 있는 능력을 갖게 되었다.

하루는 시각 00에서 시작해 시각 MM에서 끝나며, 하루의 모든 시각은 00 이상 MM 이하의 실수로 나타낸다. 강산이는 오늘 할 수 있는 일들의 목록을 가지고 있고, 각 일에는 시작 시각 SS와 끝 시각 FF가 정해져 있다. 어떤 일을 고르면 시각 SS부터 시각 FF까지(양 끝점 포함) 빈틈없이 활동하게 된다.

강산이는 일을 되도록 아껴 두고 싶어서, 다음 두 조건을 모두 만족하는 최소 부분집합만 고르려 한다.

  1. 하루의 모든 시각에서 적어도 하나의 일을 하고 있다. 즉, 고른 일들의 구간이 [0,M][0, M] 전체를 덮는다.
  2. 고른 일 중 어느 하나라도 빼면, 하루 중 아무 일도 하지 않는 시각이 반드시 생긴다. 즉, 어떤 일도 없어서는 안 된다.

최소 부분집합에서는 한 시각에 여러 일을 동시에 하고 있을 수도 있다.

오늘 할 수 있는 일들의 목록이 주어질 때, 서로 다른 최소 부분집합의 개수를 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫 줄에는 하루의 끝 시각 MM과 할 수 있는 일의 개수 NN이 주어진다. (1≤M≤1091 \le M \le 10^9, 1≤N≤1001 \le N \le 100)

이어지는 NN개의 줄에는 각 일의 시작 시각 SS와 끝 시각 FF가 주어진다. (0≤S<F≤M0 \le S < F \le M)

입력의 마지막에는 두 정수 00 00이 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 최소 부분집합의 개수를 10810^8으로 나눈 나머지를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    8 7
    0 3
    2 5
    5 8
    1 3
    3 6
    4 6
    0 2
    1 1
    0 1
    2 1
    0 1
    0 0
    
    예상 출력
    4
    1
    0