逆元 + 组合数 + 概率
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100005;
const int M = 998244353;
ll fac[N]={1,1},inv[N]={1,1},f[N]={1,1};
ll qpow(ll a,ll b,ll m){
ll ans=1;
ll k=a;
while(b){
if(b&1)ans=ans*k%m;
k=k*k%m;
b>>=1;
}
return ans;
}
ll C(ll a,ll b){
if(b>a)return 0;
return fac[a]*inv[b]%M*inv[a-b]%M;
}
void init(){//快速计算阶乘的逆元
for(int i=2;i<N;i++){
fac[i]=fac[i-1]*i%M;
f[i]=(M-M/i)*f[M%i]%M;
inv[i]=inv[i-1]*f[i]%M;
}
}
int main(){
ll n , k ,p;
init();
cin >> n >> k >> p;
ll sum = 0;
for(int i = k; i <= n ; i++)
sum = (sum+C(n,i)%M*qpow(p,i,M)%M*qpow((1-p+M)%M,n-i,M))%M;
cout << sum << endl;
}