Problem:
Score : 500 points

Problem Statement

Takahashi and Aoki will play a game. They will repeatedly play it until one of them have N wins in total.

When they play the game once, Takahashi wins with probability A %, Aoki wins with probability B %, and the game ends in a draw (that is, nobody wins) with probability C %.
Find the expected number of games that will be played, and print it as follows.

We can represent the expected value as P/Q with coprime integers P and Q.
Print the integer R between 0 and 10^9+6 (inclusive) such that R \times Q \equiv P\pmod {10^9+7}.
(Such an integer R always uniquely exists under the constraints of this problem.)

Constraints

1 \leq N \leq 100000

0 \leq A,B,C \leq 100

1 \leq A+B

A+B+C=100

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N A B C

Output

Print the expected number of games that will be played, in the manner specified in the statement.

Sample Input 1

1 25 25 50

Sample Output 1

2

Since N=1, they will repeat the game until one of them wins.
The expected number of games played is 2.

Sample Input 2

4 50 50 0

Sample Output 2

312500008

C may be 0.

Sample Input 3

1 100 0 0

Sample Output 3

1

B may also be 0.

Sample Input 4

100000 31 41 28

Sample Output 4

104136146

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>
long long gcd(long long a,long long b){return b?gcd(b,a%b):a;}
int mbk(long long a,int n,int m){return n?(mbk((a*a)%m,n/2,m)*(n%2?a:1))%m:1;}
int inv(int a,int m){return mbk((long long)a,m-2,m);}
long long A[200010],B[200010],K[200010],H[200010];
int main(){
  long long n,a,b,q=1,p=0,u,d,s,t,i,M=1e9+7;
  scanf("%lld %lld %lld %*d",&n,&a,&b);
  A[0]=B[0]=H[0]=K[0]=1;
  for(i=1;i<2*n+5;i++){
    A[i]=(A[i-1]*a)%M;
    B[i]=(B[i-1]*b)%M;
    K[i]=(K[i-1]*i)%M;
    H[i]=(H[i-1]*(a+b))%M;
  }
  for(i=n;i<2*n;i++){
    u =((A[n]*B[i-n])%M*K[i-1])%M;
    d =((H[i]*K[n-1])%M*K[i-n])%M;
    u+=((A[i-n]*B[n])%M*K[i-1])%M;
    u=u*i%M;
    s=((p*d)%M+(u*q)%M)%M;
    t=(d*q)%M;
    p=s;
    q=t;
  }
  //printf("%lld %lld\n",p,q);
  p=(p*100)%M;
  q=(q*(a+b))%M;
  u=gcd(p,q);  //printf("%lld %lld\n",p,q);
  p/=u;
  q/=u;//printf("%lld %lld\n",p,q);
  q=inv(q,M);
  printf("%lld\n",p*q%M);
  return 0;
}