//Code by Patcas Csaba #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define PII pair #define VB vector #define VI vector #define VD vector #define VS vector #define VPII vector > #define VVI vector < VI > #define VVB vector < VB > #define FORN(i, n) for(int i = 0; i < (n); ++i) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FORD(i, a, b) for(int i = (a); i >= (b); --i) #define REPEAT do{ #define UNTIL(x) }while(!(x)); #define SZ size() #define BG begin() #define EN end() #define CL clear() #define X first #define Y second #define RS resize #define PB push_back #define MP make_pair #define ALL(x) x.begin(), x.end() #define IN_FILE "a.in" #define OUT_FILE "a.out" #define BASE 1000000007 int n, x, y; int main() { //Read data //freopen(IN_FILE, "r", stdin); // freopen(OUT_FILE, "w", stdout); cin >> n; FORN(i, n) { cin >> x >> y; LL pow2 = 1, ans = 0; while (pow2 <= y) { if (pow2 >= x) { int prev = max(pow2 / 2, (LL)x); LL now = pow2 - prev; ans += now * (now + 1) / 2; ans %= BASE; } pow2 *= 2; } int prev = max(pow2 / 2, (LL)x); LL now = y - prev; ans += (now + 1) * (now + 2) / 2; ans %= BASE; cout << ans << endl; } //Solve //Write data return 0; }