#pragma GCC optimize ("O3") #pragma GCC target ("avx") #include using namespace std; typedef long long ll; #define rep(i, n) for(int i = 0; i < (n); i++) #define rep1(i, n) for(int i = 1; i <= (n); i++) #define co(x) cout << (x) << "\n" #define cosp(x) cout << (x) << " " #define ce(x) cerr << (x) << "\n" #define cesp(x) cerr << (x) << " " #define pb push_back #define mp make_pair #define chmin(x, y) x = min(x, y) #define chmax(x, y) x = max(x, y) #define Would #define you #define please int main() { cin.tie(0); ios::sync_with_stdio(false); int d, l, r, k; cin >> d >> l >> r >> k; ll kotae = 1; ll mod = 1e9 + 7; int dl = 0, dr = 0; while (l) { l /= 2; dl++; } while (r) { r /= 2; dr++; } int saidai = dl + dr - 2; if (saidai < k) { co(0); } else if ((saidai + k) % 2) { co(0); } else if (abs(dl - dr) > k) { co(0); } else { if (dl == dr) { rep1(i, d) { if (i != dl) { rep1(j, 1 << (i - 1)) kotae = kotae * j % mod; } else { kotae = kotae * (1 << (i - 1)) % mod; kotae = kotae * (1 << (k / 2 - 1)) % mod; rep1(j, (1 << (i - 1)) - 2) kotae = kotae * j % mod; } } co(kotae); } else { int lr = min(dl, dr); rep1(i, d) { if (i != lr) { rep1(j, 1 << (i - 1)) kotae = kotae * j % mod; } else { k -= abs(dl - dr); if (k == 0) k += 2; kotae = kotae * (1 << (k / 2 - 1)) % mod; rep1(j, (1 << (i - 1)) - 1) kotae = kotae * j % mod; } } co(kotae); } } Would you please return 0; }