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++14 (GCC 5.4.1) (judge verdict: Runtime Error)

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cassert>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <utility>
#include <stack>
#include <numeric>
#include <algorithm>
#include <bitset>
#include <complex>
#include <iomanip>

using namespace std;
typedef long long ll;
typedef long long int llint;
#define MM 1000000000
#define MOD MM+7
#define pi pair<int,int>
#define pl pair<ll,ll>
#define chmax(a,b) (a<b ? a=b:0)
#define chmin(a,b) (a>b ? a=b:0)
#define INF (1 << 29) //536870912

const long double PI = acos(-1);
const ll DEP = 1LL << 50;
int dx[4] = {-1,0,1,0};
int dy[4] = {0,-1,0,1};
int GCD(int x,int y){
    return y ? GCD(y,x%y) : x;
}
ll fac[100010],finv[100010],inv[100010];

void Cinit(){
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for(int i = 2; i < 100010; i++){
        fac[i] = (fac[i-1]*i)%MOD;
        inv[i] = (MOD - inv[MOD%i]*(MOD/i))%MOD;
        finv[i] = (finv[i-1]*inv[i])%MOD;
    }
}

ll nCk(ll n,ll k){
    if(n < k) return 0;
    if(n < 0 || k < 0) return 0;
    return fac[n]*(finv[k]*finv[n-k]%MOD)%MOD;
}

ll mpow(ll a, ll b){
    if(b == 0) return 1;
    ll z = mpow(a,b/2);
    z = (z*z)%MOD;
    if(b % 2 == 1) z = (z*a)%MOD;
    return z;
}

int main(){
    Cinit();
    ll A,B,C,N;
    cin >> N >> A >> B >> C;
    ll ka = (A*inv[A+B])%MOD;
    ll kb = (B*inv[A+B])%MOD;
    ll r = 0;
    for(int i = 0; i <= N-1; i++){
        ll sa = ((nCk(N-1+i,N-1)*ka)%MOD)*mpow(ka,N-1)%MOD*mpow(kb,i);
        ll sb = ((nCk(N-1+i,N-1)*kb)%MOD)*mpow(kb,N-1)%MOD*mpow(ka,i);
        r = (r + (sa + sb)%MOD*(N+i))%MOD;
    }
    cout << r*100%MOD*inv[A+B]%MOD << endl;
}