#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const long long mod2 = mod * 1ll * mod;
const int CUTOFF = 100;
inline int add(int x, int y) {
  x += y;
  if (x >= mod) x -= mod;
  return x;
}
inline int sub(int x, int y) {
  x -= y;
  if (x < 0) x += mod;
  return x;
}
inline int mul(int x, int y) { return (x * 1ll * y) % mod; }
inline void add(long long& x, long long y, long long z) {
  x += y * z;
  if (x >= mod2) x -= mod2;
}
inline void naive_mul(vector<long long>& a, vector<long long>& b) {
  vector<long long> c(a.size() + b.size() - 1);
  for (int i = 0; i < a.size(); i++)
    for (int j = 0; j < b.size(); j++) add(c[i + j], a[i], b[j]);
  for (int i = 0; i < c.size(); i++) c[i] %= mod;
  a = c;
}
inline void ADD(long long& a, long long b) {
  a += b;
  if (a >= mod) a -= mod;
}
inline int get(vector<long long>& v, int i) {
  return ((i >= v.size()) ? 0 : v[i]);
}
void Karatsuba(vector<long long>& a, vector<long long>& b) {
  int sa = a.size(), sc = 2 * sa - 1;
  if (sa <= CUTOFF) {
    naive_mul(a, b);
    return;
  }
  int h = a.size() >> 1;
  vector<long long> a2(a.begin(), a.begin() + h);
  vector<long long> a1(a.begin() + h, a.end());
  vector<long long> b2(b.begin(), b.begin() + h);
  vector<long long> b1(b.begin() + h, b.end());
  vector<long long> sma(max(a1.size(), a2.size()));
  for (int i = 0; i < a1.size(); i++) {
    sma[i] = add(get(a1, i), get(a2, i));
  }
  Karatsuba(a1, b1);
  Karatsuba(a2, b2);
  b1.resize(max(b1.size(), b2.size()));
  for (int i = 0; i < b1.size(); i++) {
    b1[i] = add(get(b1, i), get(b2, i));
  }
  Karatsuba(sma, b1);
  int sz = sa + sa - 1;
  a.clear();
  a.resize(sz);
  for (int i = 0; i < a1.size(); i++) ADD(a[i + (h << 1)], a1[i]);
  for (int i = 0; i < a2.size(); i++) ADD(a[i], a2[i]);
  for (int i = 0; i < sma.size(); i++) {
    ADD(a[i + h], sub(sma[i], add(get(a1, i), get(a2, i))));
  }
}
void karatsuba(vector<long long>& a, vector<long long>& b) {
  int sa = a.size(), sb = b.size(), sc = a.size() + b.size() - 1;
  if (sa * 1ll * sb <= CUTOFF * CUTOFF || min(sa, sb) <= 10) {
    naive_mul(a, b);
    return;
  }
  if (a.size() < b.size())
    a.resize((int)b.size());
  else
    b.resize((int)a.size());
  Karatsuba(a, b);
  a.resize(sc);
}
const int MX = 2005;
vector<long long> poly_mul(vector<long long> a, vector<long long> b) {
  karatsuba(a, b);
  if (a.size() >= MX) a.resize(MX);
  return a;
}
inline int powr(int a, long long b) {
  int x = 1 % mod;
  while (b) {
    if (b & 1) x = mul(x, a);
    a = mul(a, a);
    b >>= 1;
  }
  return x;
}
inline int inv(int a) { return powr(a, mod - 2); }
vector<long long> P[MX];
long long powersq[MX * MX], powersp[MX * MX];
vector<long long> vec;
int f[MX][MX];
int dp[MX][MX];
int E[MX];
int main() {
  int n, a, b;
  cin >> n >> a >> b;
  int p = mul(a, inv(b));
  int q = sub(1, p);
  powersp[0] = powersq[0] = 1;
  for (int i = 1; i < MX * MX; i++) {
    powersp[i] = mul(powersp[i - 1], p);
    powersq[i] = mul(powersq[i - 1], q);
  }
  for (int i = 0; i < MX; i++) P[0].push_back(1);
  f[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    f[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      f[i][j] = add(mul(f[i - 1][j], powersq[j]),
                    mul(f[i - 1][j - 1], powersp[i - j]));
    }
  }
  for (int i = 1; i <= n; i++) {
    int sm = 0;
    for (int j = 1; j < i; j++) {
      dp[i][j] = mul(dp[j][j], f[i][j]);
      sm = add(sm, dp[i][j]);
    }
    dp[i][i] = sub(1, sm);
  }
  E[1] = E[0] = 0;
  for (int i = 2; i <= n; i++) {
    int sm = 0;
    for (int j = 1; j < i; j++) {
      int v = add(E[j], add(E[i - j], add(j * (i - j), (j * (j - 1)) / 2)));
      sm = add(sm, mul(dp[i][j], v));
    }
    sm = add(sm, mul(dp[i][i], (i * (i - 1)) / 2));
    E[i] = mul(sm, inv(sub(1, dp[i][i])));
  }
  cout << E[n];
}
