#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; long long solve(const vector& a, long long x) { if(x == -1) return 0; int n = a.size(); vector dp = {1, 0}; for(int i=62; i>=0; --i){ bool up = false; bool down = false; for(int j=0; j> (i + 1)) != (a[j+1] >> (i + 1))) continue; if((a[j] & (1LL << i)) < (a[j+1] & (1LL << i))) up = true; else if((a[j] & (1LL << i)) > (a[j+1] & (1LL << i))) down = true; } vector nextDp(2, 0); if(!up){ if(x & (1LL << i)) nextDp[0] += dp[0]; nextDp[1] += dp[1]; } if(!down){ if(x & (1LL << i)){ nextDp[1] += dp[0] + dp[1]; } else{ nextDp[0] += dp[0]; nextDp[1] += dp[1]; } } dp = move(nextDp); } return dp[0] + dp[1]; } int main() { int n; long long l, r; cin >> n >> l >> r; vector a(n); for(int i=0; i> a[i]; long long ans = solve(a, r) - solve(a, l-1); cout << ans << endl; return 0; }