#include <bits/stdc++.h>
template <typename T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  bool flag = false;
  while (!isdigit(c)) {
    if (c == '-') flag = true;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  if (flag) x = -x;
}
using namespace std;
const int P = 998244353;
inline long long quickpow(long long x, int k) {
  long long res = 1;
  while (k) {
    if (k & 1) res = res * x % P;
    x = x * x % P;
    k >>= 1;
  }
  return res;
}
int n;
int p, q;
long long pmi[2010], qmi[2010];
long long dp[2010][2010], f[2010], g[2010], h[2010];
int main() {
  read(n);
  read(p), read(q);
  p = p * quickpow(q, P - 2) % P;
  q = 1 + P - p;
  pmi[0] = qmi[0] = 1;
  for (int i = 1; i <= n; ++i)
    pmi[i] = pmi[i - 1] * p % P, qmi[i] = qmi[i - 1] * q % P;
  dp[0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    dp[i][0] = 1;
    for (int j = 1; j <= n; ++j)
      dp[i][j] = (dp[i - 1][j - 1] * pmi[i - j] + dp[i - 1][j] * qmi[j]) % P;
  }
  for (int i = 1; i <= n; ++i) {
    f[i] = 1;
    for (int j = 1; j < i; ++j) {
      f[i] = (f[i] - dp[i][j] * f[j]) % P;
    }
  }
  for (int i = 2; i <= n; ++i) {
    g[i] = 1ll * i * (i - 1) / 2;
    for (int j = 1; j < i; ++j)
      g[i] = (g[i] + f[j] * dp[i][j] % P * (g[j] + h[i - j]) % P) % P;
    g[i] = g[i] * quickpow(1 - f[i] + P, P - 2) % P;
    h[i] = f[i] * g[i] % P;
    for (int j = 1; j < i; ++j)
      h[i] = (h[i] + f[j] * dp[i][j] % P * (g[j] + h[i - j]) % P) % P;
  }
  printf("%lld\n", (g[n] % P + P) % P);
  return 0;
}
