만드는 중입니다

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

능력

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

요약
능력을 무작위 순서로 중복 없이 시도하다가 하나가 발동하면 멈추는 공격 한 번의 기대 피해량을 구해 유리수로 1e9+7 모듈로 출력한다.
난이도

보통10점 중 7점

유형
확률, 수학, 조합론, 동적 계획법
정답자
아직 제출이 없습니다

문제

몬스터와 싸우는 웹게임에서 플레이어는 공격 능력 NN개를 모두 장착하고 있다. 능력에는 1번부터 NN번까지 번호가 붙어 있다.

ii번 능력에는 발동 확률 pip_i와 피해량 did_i가 정해져 있다. ii번 능력에 발동 명령을 내리면 pip_i의 확률로 능력이 발동해 상대에게 did_i만큼의 피해를 입히고, 1−pi1 - p_i의 확률로 발동하지 않아 아무 일도 일어나지 않는다.

공격 기회를 한 번 얻으면 다음 과정이 진행된다.

  1. 장착한 능력 중 하나를 고른다. 각 능력이 뽑힐 확률은 모두 같다.
  2. 고른 능력에 발동 명령을 내린다.
  3. 능력이 발동했으면 공격 기회를 잃고 과정이 끝난다.
  4. 발동하지 않았으면 아직 발동 명령을 내리지 않은 능력 중 하나를 같은 확률로 고른 뒤 2번으로 돌아간다.
  5. 모든 능력에 발동 명령을 내렸는데도 발동한 능력이 하나도 없으면 피해 없이 공격 기회를 잃는다.

능력 NN개의 발동 확률과 피해량이 주어질 때, 공격 기회 한 번에서 상대에게 주는 피해량의 기댓값을 구하라.

입력

첫째 줄에 능력의 수 NN (1≤N≤50001 \le N \le 5000)이 주어진다.

다음 NN개 줄 중 ii번째 줄에는 두 정수 pip_i, did_i (1≤pi,di≤1091 \le p_i, d_i \le 10^9)가 공백을 사이에 두고 주어진다. ii번 능력은 pi/109p_i / 10^9의 확률로 발동하고, 발동하면 did_i만큼의 피해를 입힌다.

출력

공격 기회 한 번에서 주는 피해량의 기댓값을 출력한다. 기댓값을 기약분수 a/ba/b로 나타냈을 때 (a×b−1) mod (109+7)(a \times b^{-1}) \bmod (10^9 + 7)을 대신 출력한다. b−1b^{-1}은 109+710^9 + 7을 법으로 하는 bb의 곱셈 역원이다. 이 문제에서 주어지는 모든 입력에 대해 이 값은 존재한다.

예제8

  1. 예제 1

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

    입력
    9
    1 9
    2 8
    3 7
    4 6
    5 5
    6 4
    7 3
    8 2
    9 1
    
    예상 출력
    93531355
    
  3. 예제 3

    입력
    1
    1000000000 1000000000
    
    예상 출력
    1000000000
    
  4. 예제 4

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

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

    입력
    2
    1 1000000000
    1000000000 1
    
    예상 출력
    571428577
    
  7. 예제 7

    입력
    5
    2 3
    4 5
    6 7
    8 9
    10 11
    
    예상 출력
    55532270
    
  8. 예제 8

    입력
    6
    999999999 1000000000
    1000000000 999999999
    500000000 2
    1 1
    123456789 987654321
    999999998 3
    
    예상 출력
    326678928