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

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

도로망 2

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

요약
주어진 차수 수열을 만족하는 라벨 트리의 개수를 세고, 불가능하면 BRAK을 출력한다. n은 최대 200만이다.
난이도

보통10점 중 6점

유형
트리, 조합론, 수학
정답자
아직 제출이 없습니다

문제

바이트제(Byteland)에는 11번부터 nn번까지 번호가 매겨진 nn개의 도시가 있다. 모든 도로는 양방향이며 서로 다른 두 도시를 잇는다. 서로 다른 임의의 두 도시 사이에는 같은 도시를 두 번 이상 지나지 않는 도로들의 경로가 정확히 하나 존재한다. 즉, 도로망은 nn개의 정점과 n−1n-1개의 간선으로 이루어진 트리이다.

각 도시 ii에 연결된 도로의 수(차수)가 정확히 did_i가 되도록 도로망을 만들려고 한다. 이 조건을 만족하는 도로망은 매우 많을 수 있다. 조건을 만족하는 서로 다른 도로망이 모두 몇 가지인지 구하여라. 도시마다 서로 다른 번호가 붙어 있으므로, 간선의 집합이 다르면 서로 다른 도로망으로 센다.

입력

첫째 줄에 정수 nn (2≤n≤20000002 \le n \le 2000000)이 주어진다. 둘째 줄에 nn개의 정수 d1,d2,…,dnd_1, d_2, \ldots, d_n (1≤di≤n−11 \le d_i \le n-1)이 공백으로 구분되어 주어진다. did_i는 ii번 도시의 차수이다.

출력

조건을 만족하는 도로망이 하나도 존재하지 않으면 첫째 줄에 BRAK(폴란드어로 '없음'을 뜻한다)을 출력한다. 그렇지 않으면 조건을 만족하는 서로 다른 도로망의 수를 1,000,000,007로 나눈 나머지를 출력한다.

힌트

예제4

  1. 예제 1

    입력
    6
    1 1 3 3 1 1
    
    예상 출력
    6
    
  2. 예제 2

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

    입력
    3
    1 1 1
    
    예상 출력
    BRAK
    
  4. 예제 4

    입력
    3
    2 1 1
    
    예상 출력
    1