#include #include using namespace std; using namespace atcoder; using mint = modint998244353; int main(){ int n; cin >> n; long long s, x; cin >> s >> x; vector> f(2,vector(n+1,0)); vector fact(n+1,1), ifact(n+1,1); for (int i = 2; i <= n; i++) fact[i] = fact[i-1] * i; ifact[n] = fact[n].inv(); for (int i = n-1; i >= 2; i--) ifact[i] = ifact[i+1] * (i+1); for (int i = 0; i <= n; i++) f[i&1][i] = fact[n] * ifact[i] * ifact[n-i]; vector cur = {1}; for (int d = 0; d < 61; d++){ cur = convolution(cur, f[x >> d & 1]); int siz = cur.size(); vector nex((siz+1)/2,0); for (int i = (s >> d & 1); i < siz; i += 2){ nex[i/2] = cur[i]; } swap(cur,nex); } cout << cur[0].val() << endl; }