칵테일 만들기

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

요약
1부터 N까지의 수열을 연속한 비어 있지 않은 구간으로 나누되, 어떤 구간도 주어진 나쁜 쌍의 두 원소를 함께 포함하지 않게 하는 분할의 수를 10^9+7로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 투 포인터, 누적 합, 정렬
정답자
아직 제출이 없습니다

문제

Pia는 스톡홀름의 유명한 나이트클럽 Supernova에서 일하는 유명한 바텐더이다. 그녀의 가장 인상적인 묘기 중 하나는 바에 있는 NN가지 서로 다른 음료 재료를 각각 정확히 한 번씩 사용해 여러 잔의 칵테일을 만드는 것이다. 그녀는 다음과 같은 방식으로 이를 해낸다.

먼저 Pia는 만들 칵테일의 수를 정한다. 그러면 각 재료가 1,2,…,N1, 2, \dots, N의 순서로 그녀 앞에 나열된다. 첫 번째 칵테일에는 왼쪽에서부터 양의 개수 KK개의 재료, 즉 1,2,...,K1, 2, ..., K를 사용한다. 다음 칵테일에는 아직 사용하지 않은 첫 번째 재료부터 양의 개수 LL개의 재료, 즉 K+1,K+2,…,K+LK + 1, K + 2, \dots, K + L을 사용한다. 그녀는 마지막 칵테일이 재료 N−M,N−M+1,…,NN - M, N - M + 1, \dots, N을 사용할 때까지 이 과정을 계속한다.

하지만 모든 재료 쌍이 칵테일에서 잘 어울리는 것은 아니다. 예를 들어 우유와 물은 그다지 잘 어울리지 않는다. 그녀는 어떤 칵테일에도 어울리지 않는 재료 쌍을 넣을 수 없다.

지금까지 그녀는 매일 밤 서로 다른 칵테일 조합을 만들어 왔다. 그녀는 며칠 동안 새로운 칵테일 조합을 만들 수 있는가? 두 칵테일 조합이 정확히 같은 칵테일들로 이루어져 있지 않으면 서로 다르다고 하며, 일부 칵테일을 공유하는 것은 허용된다.

입력

첫 번째 줄에는 두 정수 1≤N≤100 0001 \le N \le 100\,000과 0≤P≤100 0000 \le P \le 100\,000가 주어진다. NN은 재료의 수이고 PP는 어울리지 않는 재료 쌍의 수이다.

다음 PP개의 줄에는 각각 두 정수 1≤a≠b≤N1 \le a \not= b \le N가 주어지며, 이는 칵테일에서 서로 어울리지 않는 두 재료이다. 같은 재료 쌍이 이 목록에 여러 번 나타날 수 있다.

출력

Pia가 서로 다른 칵테일 조합을 만들 수 있는 날의 수를 하나의 정수로 출력한다. 이 수는 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

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

    입력
    5 0
    
    예상 출력
    16