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>.
#include <bits/stdc++.h>
const int U[5] = {0, -1, 0, 1, 0}, V[5] = {0, 0, -1, 0, 1};
using namespace std;
long long ksm(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % 1000000007;
    a = a * a % 1000000007;
    b >>= 1;
  }
  return ans;
}
int id[101][101];
struct matrix {
  int num[101 * 80][101 * 80];
  long long answer(int n, int r) {
    int d = r * 2;
    for (int i = 1; i <= n; i++) {
      long long inv = ksm(num[i][i], 1000000007 - 2);
      for (int j = i + 1, p1 = 0; j <= n && p1 <= d; j++, p1++) {
        long long res = inv * num[j][i] % 1000000007;
        if (!res) continue;
        for (int k = i, p2 = 0; k <= n && p2 <= d; k++, p2++)
          num[j][k] = (num[j][k] - num[i][k] * res % 1000000007 + 1000000007) %
                      1000000007;
        num[j][0] = (1ll * num[j][0] - 1ll * num[i][0] * res % 1000000007 +
                     1000000007) %
                    1000000007;
      }
    }
    int p = id[0 + 50][0 + 50];
    for (int i = n; i >= p; i--) {
      long long inv = ksm(num[i][i], 1000000007 - 2);
      num[i][0] = 1ll * num[i][0] * inv % 1000000007;
      for (int j = i - 1; j >= p; j--)
        num[j][0] = (num[j][0] - 1ll * num[j][i] * num[i][0] % 1000000007 +
                     1000000007) %
                    1000000007;
    }
    return num[p][0];
  }
} o;
int r;
long long p[5];
bool dis(int x, int y, int r) {
  return 1ll * x * x + 1ll * y * y <= 1ll * r * r;
}
int main() {
  scanf("%d%lld%lld%lld%lld", &r, &p[1], &p[2], &p[3], &p[4]);
  const long long inv =
      ksm((p[1] + p[2] + p[3] + p[4]) % 1000000007, 1000000007 - 2);
  for (int i = 1; i <= 4; i++) p[i] = p[i] * inv % 1000000007;
  int cnt = 0;
  for (int i = r; i >= -r; i--)
    for (int j = -r; j <= r; j++)
      if (dis(i, j, r)) id[i + 50][j + 50] = ++cnt;
  for (int i = r; i >= -r; i--)
    for (int j = -r; j <= r; j++)
      if (id[i + 50][j + 50]) {
        for (int k = 1; k <= 4; k++)
          if (id[i + U[k] + 50][j + V[k] + 50])
            o.num[id[i + 50][j + 50]][id[i + U[k] + 50][j + V[k] + 50]] = p[k];
        o.num[id[i + 50][j + 50]][0] =
            o.num[id[i + 50][j + 50]][id[i + 50][j + 50]] = -1;
      }
  printf("%lld", o.answer(cnt, r));
  return 0;
}
