#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 2333;
const long long S = MAXN * MAXN;
const long long MOD = 998244353;
long long n, a, b, p, cho[MAXN + 10][MAXN + 10], stay[MAXN + 10], f[MAXN + 10];
inline long long qp(long long x, long long y) {
  long long res = 1;
  for (; y; y >>= 1, (x *= x) %= MOD)
    if (y & 1) (res *= x) %= MOD;
  return res;
}
inline long long ny(long long x) { return qp(x, MOD - 2); }
inline long long fg(long long x) { return ((x % MOD) + MOD) % MOD; }
inline void fix(long long& x) { ((x %= MOD) += MOD) %= MOD; }
inline void add(long long& x, long long y) {
  x += y;
  fix(x);
}
inline long long wq(long long x) { return ny(fg(1 - x)); }
int main() {
  scanf("%lld%lld%lld", &n, &a, &b);
  p = fg(a * ny(b));
  cho[0][0] = 1;
  for (long long i = 0; i < n; ++i)
    for (long long j = 0; j <= i; ++j) {
      add(cho[i + 1][j], cho[i][j] * qp(1 - p, j));
      add(cho[i + 1][j + 1], cho[i][j] * qp(p, i - j));
    }
  stay[0] = 0;
  for (long long i = 1; i <= n; ++i) {
    stay[i] = 1;
    for (long long j = 0; j < i; ++j)
      stay[i] = fg(stay[i] - stay[j] * cho[i][j]);
  }
  for (long long i = 2, j, a, w; i <= n; ++i) {
    a = fg(i * (i - 1) / 2);
    for (w = 0, j = 1; j < i; ++j)
      w += fg(fg(stay[j] * cho[i][j]) *
              (f[j] + f[i - j] - (i - j) * (i - j - 1) / 2));
    f[i] = fg(fg(wq(stay[i]) * fg(a + w)));
  }
  printf("%lld", f[n]);
  return 0;
}
