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;
template <class T>
T read() {
  T x = 0, w = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') w = -w;
  for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
  return x * w;
}
template <class T>
inline T read(T& x) {
  return x = read<T>();
}
const int mod = 1000000000 + 7;
inline int add(int a, int b) { return (a += b) >= mod ? a - mod : a; }
inline int mul(int a, int b) { return (long long)a * b % mod; }
inline int fpow(int a, int b) {
  int ans = 1;
  for (; b; b >>= 1, a = mul(a, a))
    if (b & 1) ans = mul(ans, a);
  return ans;
}
const int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, -1, 0, 1};
int p[4];
const int N = 103, O = 51;
int idx[N][N], tot;
pair<int, int> pt[N * N];
const int M = 7845 + 5;
int a[M][M];
int main() {
  int R = read<int>();
  int all = 0;
  for (int i = 0; i <= 3; ++i) all += read(p[i]);
  all = fpow(all, mod - 2);
  for (int i = 0; i <= 3; ++i) p[i] = mul(p[i], all);
  for (int y = -R; y <= R; ++y)
    for (int x = -R; x <= R; ++x)
      if (x * x + y * y <= R * R)
        idx[x + O][y + O] = ++tot, pt[tot] = make_pair(x + O, y + O);
  for (int i = 1; i <= tot; ++i) {
    a[i][i] = 1, a[i][tot + 1] = 1;
    int x = pt[i].first, y = pt[i].second;
    for (int j = 0; j <= 3; ++j)
      if (idx[x + dx[j]][y + dy[j]])
        a[i][idx[x + dx[j]][y + dy[j]]] = mod - p[j];
  }
  int lim = 0;
  for (int i = 1; i <= tot; ++i) {
    lim = max(lim, idx[pt[i].first][pt[i].second + 1]);
    int inv = fpow(a[i][i], mod - 2);
    for (int j = i + 1; j <= lim; ++j)
      if (a[j][i]) {
        int coef = mul(mod - a[j][i], inv);
        for (int k = i; k <= lim; ++k)
          a[j][k] = add(a[j][k], mul(coef, a[i][k]));
        a[j][tot + 1] = add(a[j][tot + 1], mul(coef, a[i][tot + 1]));
      }
  }
  for (int i = tot; i >= 1; --i) {
    for (int j = i + 1; j <= tot; ++j)
      a[i][tot + 1] = add(a[i][tot + 1], mod - mul(a[i][j], a[j][tot + 1])),
                 a[i][j] = 0;
    a[i][tot + 1] = mul(a[i][tot + 1], fpow(a[i][i], mod - 2)), a[i][i] = 1;
  }
  printf("%d\n", a[idx[O][O]][tot + 1]);
  return 0;
}