#include #include #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; using mint = modint998244353; struct Comb { vector fact, ifact; int MAX_COM; Comb() {} Comb(int n) { MAX_COM = n; // ここでMAX入力を調整 init(998244353, MAX_COM); } void init(long long MOD, long long MAX_COM) { int n = MAX_COM; assert(n < MOD); fact = vector(n + 1); ifact = vector(n + 1); fact[0] = 1; for (int i = 1; i <= n; ++i) fact[i] = fact[i - 1] * i; ifact[n] = fact[n].inv(); for (int i = n; i >= 1; --i) ifact[i - 1] = ifact[i] * i; } mint operator()(long long n, long long k) { if (k < 0 || k > n) return 0; return fact[n] * ifact[k] * ifact[n - k]; } }; Comb comb(5000010); int main() { int N, x; cin >> N >> x; vector alc(3000); vector c(3000); vector als(3000, vector(3000)); vector s(3000, vector(3000)); mint ans = 0; mint p = (mint)x / 100; mint q = 1 - p; function fc; function fs; fc = [&](int n) { if (alc[n]) return c[n]; mint ret = 1; rep(i, 1, n) { ret -= fs(n, i); } alc[n] = 1; return c[n] = ret; }; fs = [&](int n, int k) { if (als[n][k]) return s[n][k]; mint ret = comb(n - 1, k - 1); ret *= fc(k); ret *= q.pow(k * (n - k)); als[n][k] = 1; return s[n][k] = ret; }; rep(k, 1, N + 1) { ans += k * fs(N, k); } cout << ans.val() << endl; }