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>
const int N = 10005;
const int mod = 1e9 + 7;
using namespace std;
int po(int n, int k) {
  int ans = 1;
  while (k) {
    if (k & 1) ans = 1LL * ans * n % mod;
    n = 1LL * n * n % mod;
    k >>= 1;
  }
  return ans;
}
vector<int> mv[N];
int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
int R, a[4], id[101][101], sum, cnt;
int ans[N];
int ck(int i, int j) {
  return (i - 50) * (i - 50) + (j - 50) * (j - 50) <= R * R;
}
void add(int& a, int b) {
  a += b;
  if (a >= mod) a -= mod;
  if (a < 0) a += mod;
}
int nani[] = {666666673, 666666673, 666666674, 666666673, 666666673};
bool ck() {
  for (int i = 0; i < cnt; i++) {
    int sum = 0;
    for (int j = 0; j < cnt; j++) {
      sum = (sum + 1LL * nani[j] * mv[i][j]) % mod;
    }
    if (sum != mv[i][cnt]) return false;
  }
  return true;
}
int main() {
  cin >> R;
  for (int i = 0; i < 4; i++) cin >> a[i], sum += a[i];
  sum = po(sum, mod - 2);
  for (int i = 0; i < 4; i++) a[i] = 1LL * a[i] * sum % mod;
  for (int i = 0; i <= 100; i++)
    for (int j = 0; j <= 100; j++)
      if (ck(i, j)) id[i][j] = cnt++;
  for (int i = 0; i <= 100; i++)
    for (int j = 0; j <= 100; j++) {
      if (ck(i, j)) {
        int num = id[i][j];
        mv[num].resize(cnt + 1);
        mv[num][num] = mv[num][cnt] = mod - 1;
        for (int nid = 0; nid < 4; nid++) {
          int x = i + dx[nid], y = j + dy[nid];
          if (ck(x, y)) mv[num][id[x][y]] = a[nid];
        }
      }
    }
  for (int i = 0; i < cnt; i++) {
    for (int j = 0; j < 120; j++)
      if (i + j < cnt && mv[i + j][i]) {
        swap(mv[i], mv[i + j]);
        break;
      }
    for (int j = 0; j < 120; j++)
      if (j && 0 <= i + j && i + j < cnt && mv[i + j][i]) {
        int mul = 1LL * mv[i + j][i] * po(mv[i][i], mod - 2) % mod;
        for (int k = 0; k < 120; k++) {
          if (i + k < cnt)
            mv[i + j][i + k] = (mv[i + j][i + k] - 1LL * mv[i][i + k] * mul +
                                1LL * mod * mod) %
                               mod;
        }
        mv[i + j][cnt] =
            (mv[i + j][cnt] - 1LL * mv[i][cnt] * mul + 1LL * mod * mod) % mod;
      }
  }
  for (int i = cnt - 1; i >= 0; i--) {
    int sum = mv[i][cnt];
    for (int j = i + 1; j < cnt; j++)
      sum = (sum - 1LL * ans[j] * mv[i][j] + 1LL * mod * mod) % mod;
    ans[i] = 1LL * sum * po(mv[i][i], mod - 2) % mod;
  }
  cout << ans[id[50][50]];
}