#include <bits/stdc++.h>
using namespace std;
long long fac[2005];
pair<long long, long long> gcd(long long a, long long b) {
  if (a == 0) {
    return make_pair(0, 1);
  }
  pair<long long, long long> prev = gcd(b % a, a);
  return make_pair(prev.second - (b / a) * prev.first, prev.first);
}
long long modInv(long long x) {
  pair<long long, long long> res = gcd(x, 998244353LL);
  res.first = (res.first + 998244353LL) % 998244353LL;
  return res.first;
}
long long modDiv(long long x, long long y) {
  return (x * modInv(y)) % 998244353LL;
}
long long getFacs() {
  fac[0] = 1;
  for (int i = (1); i <= (signed)(2005 - 1); i++) {
    fac[i] = (fac[i - 1] * i) % 998244353LL;
  }
}
long long choose(long long a, long long b) {
  long long c = a - b;
  if (c < 0) {
    cout << "ur bad\n";
    exit(0);
  }
  long long num = fac[a];
  long long denom = (fac[b] * fac[c]) % 998244353LL;
  return modDiv(num, denom);
}
long long modExp(long long b, long long ex) {
  long long prod = 1;
  while (ex > 0) {
    if (ex % 2 == 0) {
      b = (b * b) % 998244353LL;
      ex /= 2;
    } else {
      prod = (prod * b) % 998244353LL;
      ex--;
    }
  }
  return prod;
}
long long c2(long long x) { return x * (x - 1) / 2; }
int n;
long long p;
long long dp[2005];
long long p1[2005][2005];
long long p2[2005];
long long calcP1(int x, int y) {
  if (p1[x][y] != -1) return p1[x][y];
  if (y == 0) return p1[x][y] = 1;
  if (x < y) return p1[x][y] = 0;
  long long pt1 = (calcP1(x - 1, y) * modExp(p, y)) % 998244353LL;
  long long pt2 = (calcP1(x - 1, y - 1) * modExp(1 + 998244353LL - p, x - y));
  return p1[x][y] = (pt1 + pt2) % 998244353LL;
}
long long calcP2(int x) {
  if (p2[x] != -1) return p2[x];
  if (x == 1) return p2[x] = 1;
  long long bad = 0;
  for (int i = (1); i <= (signed)(x - 1); i++) {
    bad = (bad + calcP1(x, i) * calcP2(i)) % 998244353LL;
  }
  return p2[x] = 1 + 998244353LL - bad;
}
long long calcDP(int x) {
  if (dp[x] != -1) return dp[x];
  if (x <= 1) return dp[x] = 0;
  long long tot = 0;
  for (int i = (1); i <= (signed)(x - 1); i++) {
    long long push_back = (calcP1(x, i) * calcP2(i)) % 998244353LL;
    long long amt =
        (c2(i) + i * (x - i) + calcDP(i) + calcDP(x - i)) % 998244353LL;
    tot = (tot + push_back * amt) % 998244353LL;
  }
  long long ree = (calcP1(x, x) * calcP2(x)) % 998244353LL;
  long long reee = (c2(x) + calcDP(0)) % 998244353LL;
  long long reeee = (tot + (ree * reee)) % 998244353LL;
  long long reeeee = modDiv(reeee, 1 + 998244353LL - ree);
  return dp[x] = reeeee;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  int a, b;
  cin >> a >> b;
  p = modDiv(a, b);
  memset(dp, -1, sizeof dp);
  memset(p1, -1, sizeof p1);
  memset(p2, -1, sizeof p2);
  cout << calcDP(n) << "\n";
  return 0;
}
