Problem: A chip was placed on a field with coordinate system onto point (0, 0).

Every second the chip moves randomly. If the chip is currently at a point (x, y), after a second it moves to the point (x - 1, y) with probability p1, to the point (x, y - 1) with probability p2, to the point (x + 1, y) with probability p3 and to the point (x, y + 1) with probability p4. It's guaranteed that p1 + p2 + p3 + p4 = 1. The moves are independent.

Find out the expected time after which chip will move away from origin at a distance greater than R (i.e. <image> will be satisfied).

Input

First line contains five integers R, a1, a2, a3 and a4 (0 ≤ R ≤ 50, 1 ≤ a1, a2, a3, a4 ≤ 1000).

Probabilities pi can be calculated using formula <image>.

Output

It can be shown that answer for this problem is always a rational number of form <image>, where <image>.

Print P·Q - 1 modulo 109 + 7. 

Examples

Input

0 1 1 1 1


Output

1

Input

1 1 1 1 1


Output

666666674

Input

1 1 2 1 2


Output

538461545

Note

In the first example initially the chip is located at a distance 0 from origin. In one second chip will move to distance 1 is some direction, so distance to origin will become 1.

Answers to the second and the third tests: <image> and <image>.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int DR[4] = {-1, 0, 1, 0};
const int DC[4] = {0, -1, 0, 1};
long long A[4];
const int MAGIC = 105;
map<pair<int, int>, int> id;
const long long MOD = 1000000007;
long long modex(long long a, long long p, long long m = MOD) {
  if (!p) return 1;
  if (p & 1) return a * modex(a, p - 1, m) % m;
  long long v = modex(a, p >> 1, m);
  return v * v % m;
}
int M[7850][7850];
int main() {
  int R;
  scanf("%d", &R);
  for (int d = 0; d < 4; ++d) scanf("%lld", &A[d]);
  long long denom = modex(A[0] + A[1] + A[2] + A[3], MOD - 2);
  for (int d = 0; d < 4; ++d) A[d] = A[d] * denom % MOD;
  vector<pair<int, int>> pts;
  for (int i = -R; i <= R; ++i)
    for (int j = -R; j <= R; ++j)
      if (i * i + j * j <= R * R) {
        pts.push_back({i, j});
        id[{i, j}] = pts.size() - 1;
      }
  int N = pts.size();
  for (int p = 0; p < N; ++p) {
    int i, j;
    tie(i, j) = pts[p];
    M[p][p] = 1;
    M[p][N] = 1;
    for (int d = 0; d < 4; ++d) {
      int ii = i + DR[d], jj = j + DC[d];
      if (id.count({ii, jj})) M[p][id[{ii, jj}]] = -A[d];
    }
  }
  for (int r = 0; r < N; ++r) {
    assert(M[r][r]);
    int las = min(N, r + MAGIC);
    long long mult = modex(M[r][r], MOD - 2);
    for (int j = r; j < las; ++j) M[r][j] = mult * M[r][j] % MOD;
    M[r][N] = mult * M[r][N] % MOD;
    for (int i = r + 1; i < las; ++i) {
      long long t = M[i][r];
      for (int j = r; j < las; ++j) {
        M[i][j] = (M[i][j] - t * M[r][j]) % MOD;
      }
      M[i][N] = (M[i][N] - t * M[r][N]) % MOD;
    }
  }
  for (int r = N - 1; r >= 0; --r) {
    assert(M[r][r] == 1);
    int las = min(N, r + MAGIC);
    for (int i = r + 1; i < las; ++i) {
      M[r][N] = (M[r][N] - (long long)M[r][i] * M[i][N]) % MOD;
    }
  }
  int ans = M[id[{0, 0}]][N];
  if (ans < 0) ans += MOD;
  printf("%d\n", ans);
}