#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const long long LL_INF = 1ll * INF * INF;
const int MAX_N = 2000 + 7;
const int mod = 998244353;
template <typename T>
inline void addmod(T& a, const long long& b, const int& MOD = mod) {
  a = (a + b) % MOD;
  if (a < 0) a += MOD;
}
int n;
int a, b;
long long f[MAX_N];
long long expected[MAX_N][2];
long long split[MAX_N][MAX_N];
class InverseModule {
 public:
  static const int MOD = ::mod;
  static const int MAX_N = 1e6 + 7;
  int fact[MAX_N];
  int invFact[MAX_N];
  InverseModule() {
    fact[0] = invFact[0] = 1;
    for (int i = 1; i < MAX_N; ++i) {
      fact[i] = (long long)fact[i - 1] * i % MOD;
      invFact[i] = inverse(fact[i], MOD);
    }
  }
  int inverse(int x, int n) {
    int r = n, newr = x;
    int t = 0, newt = 1;
    while (newr > 0) {
      int q = r / newr;
      int tmp = newr;
      newr = r % newr;
      r = tmp;
      tmp = newt;
      newt = t - q * newt;
      t = tmp;
    }
    if (t < 0) t += n;
    return t;
  }
  int C(int n, int k) {
    return (long long)fact[n] * invFact[n - k] % MOD * invFact[k] % MOD;
  }
  long long pw(long long x, long long k) {
    if (!k)
      return 1;
    else if (k & 1)
      return pw(x, k - 1) * x % MOD;
    long long tmp = pw(x, k / 2);
    return tmp * tmp % MOD;
  }
  pair<int, int> extended_euclid(int a, int b) {
    int s0 = 1, t0 = 0;
    int s1 = 0, t1 = 1;
    while (b > 0) {
      int q = a / b;
      int tmp = 0;
      tmp = s1;
      s1 = s0 - q * s1;
      s0 = tmp;
      tmp = t1;
      t1 = t0 - q * t1;
      t0 = tmp;
      tmp = b;
      b = a - q * b;
      a = tmp;
    }
    return {s0, t0};
  }
  int stirling_second_kind(int n, int k) {
    long long res = 0;
    for (int j = 0; j <= k; ++j) {
      long long temp = 1ll * C(k, j) * pw(j, n);
      if ((k - j) & 1)
        res = (res - temp + MOD) % MOD;
      else
        res = (res + temp) % MOD;
    }
    return res * invFact[k] % MOD;
  }
} inv;
long long p[MAX_N];
long long rev_p[MAX_N];
void solve() {
  cerr << fixed << setprecision(6);
  cin >> n >> a >> b;
  f[1] = 1;
  p[0] = 1;
  rev_p[0] = 1;
  p[1] = 1ll * a * inv.inverse(b, mod) % mod;
  rev_p[1] = 1ll * (b - a) * inv.inverse(b, mod) % mod;
  for (int i = 0; i <= n; ++i) split[i][0] = split[i][i] = 1;
  for (int i = 1; i <= n; ++i) {
    p[i] = 1ll * p[i - 1] * p[1] % mod;
    rev_p[i] = 1ll * rev_p[i - 1] * rev_p[1] % mod;
  }
  for (int i = 2; i <= n; ++i) {
    int full = i * (i - 1) / 2;
    f[i] = 1;
    for (int j = 1; j < i; ++j) {
      addmod(split[i][j], split[i - 1][j - 1] * p[i - j], mod);
      addmod(split[i][j], split[i - 1][j] * rev_p[j], mod);
      addmod(f[i], -split[i][j] * f[j] % mod, mod);
      addmod(expected[i][1],
             (expected[i - j][1] + expected[j][0]) * split[i][j] % mod * f[j],
             mod);
    }
    addmod(expected[i][0],
           (full + expected[i][1]) * inv.inverse((1 - f[i] + mod) % mod, mod));
    addmod(expected[i][1], f[i] * expected[i][0]);
  }
  cout << expected[n][0] % mod << '\n';
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  const bool multiple_test = false;
  int test = 1;
  if (multiple_test) cin >> test;
  for (int i = 0; i < test; ++i) {
    solve();
  }
}
