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 MAXN = 7850, Mod = 1e9 + 7;
int Add(int x, int y) {
  x += y;
  return x >= Mod ? x - Mod : x;
}
int Sub(int x, int y) {
  x -= y;
  return x < 0 ? x + Mod : x;
}
int Mul(int x, int y) { return 1ll * x * y % Mod; }
int Qkpow(int x, int po) {
  int p = 1;
  for (; po; po >>= 1, x = Mul(x, x))
    if (po & 1) p = Mul(p, x);
  return p;
}
int Inv(int x) { return Qkpow(x, Mod - 2); }
int cnt, id[105][105];
int a[MAXN + 5][MAXN + 5], Ans[MAXN + 5];
void Gauss(int n, int d) {
  static int from[MAXN + 5];
  for (int i = 1; i <= n; i++) from[i] = i;
  for (int i = 1; i <= n; i++) {
    if (!a[i][i])
      for (int j = i + 1; j <= min(n, i + d); j++)
        if (a[i][j]) {
          for (int k = max(1, i - d); k <= min(n, i + d); k++)
            swap(a[k][i], a[k][j]);
          swap(from[i], from[j]);
          break;
        }
    int iv = Inv(a[i][i]);
    for (int j = i + 1; j <= min(n, i + d); j++) {
      double div = Mul(a[j][i], iv);
      for (int k = i; k <= min(n, i + d); k++)
        a[j][k] = Sub(a[j][k], Mul(a[i][k], div));
      a[j][n + 1] = Sub(a[j][n + 1], Mul(a[i][n + 1], div));
    }
  }
  for (int i = n; i >= 1; i--) {
    Ans[from[i]] = a[i][n + 1];
    for (int j = i + 1; j <= min(i + d, n); j++)
      Ans[from[i]] = Sub(Ans[from[i]], Mul(Ans[from[j]], a[i][j]));
    Ans[from[i]] = Mul(Ans[from[i]], Inv(a[i][i]));
  }
}
int r, p1, p2, p3, p4, p;
int main() {
  scanf("%d %d %d %d %d", &r, &p1, &p2, &p3, &p4);
  p = Add(Add(p1, p2), Add(p3, p4));
  p1 = Mul(p1, Inv(p));
  p2 = Mul(p2, Inv(p));
  p3 = Mul(p3, Inv(p));
  p4 = Mul(p4, Inv(p));
  for (int i = 0; i <= 2 * r; i++)
    for (int j = 0; j <= 2 * r; j++)
      if ((r - i) * (r - i) + (r - j) * (r - j) <= r * r) id[i][j] = ++cnt;
  for (int i = 0; i <= 2 * r; i++)
    for (int j = 0; j <= 2 * r; j++)
      if (id[i][j]) {
        a[id[i][j]][id[i][j]] = 1;
        if (i && id[i - 1][j]) a[id[i][j]][id[i - 1][j]] = Mod - p1;
        if (j && id[i][j - 1]) a[id[i][j]][id[i][j - 1]] = Mod - p2;
        if (id[i + 1][j]) a[id[i][j]][id[i + 1][j]] = Mod - p3;
        if (id[i][j + 1]) a[id[i][j]][id[i][j + 1]] = Mod - p4;
        a[id[i][j]][cnt + 1] = 1;
      }
  Gauss(cnt, 2 * r);
  printf("%d\n", Ans[id[r][r]]);
  return 0;
}