### 问题描述
在 C 编程语言中,a < b
跟 a + b
一样都是表达式,计算结果为整数。当 a<b 成立时,a < b
的计算结果为 1;当 a<b 不成立时,计算结果为 0。在 C 语言中,0 的真值定义为“假”,1 的真值定义为“真”(不考虑其他数字的真值)。于是我们发现,C 语言中 a < b
的真值与数学中 a<b 的真值一定相同。
若定义函数 less(a,b) 如下:
\text {less}(a, b) = \left\{ \begin {aligned} 1, & \quad a < b \\ 0, & \quad a \ge b \end {aligned} \right.
则 C 语言计算 a < b
时,实际上计算的是 less(a,b)。
然而,C 语言中 a < b < c
的真值与数学中 a<b<c 的真值不总是相同。这是因为:
a < b
的值,记为 x
,再计算 x < c
的值作为结果,等价的数学表达式应该写成 less(a,b)<c。a < b && b < c
(其中 &&
表示“且”)。现在给出整数 A 和 C 的值,请求出满足以下条件的有序数对 ⟨a,c⟩ 的个数:
a < b < c
的真值都与数学中 a<b<c 的真值相同(即 less(a,b)<c 当且仅当 a<b<c)。此处忽略 C 语言整数的范围。
第一行包含一个整数 T,表示测试用例的个数。
每个测试用例包含一行,两个用空格隔开的整数 A 和 C。
对于每个测试用例,输出一行,包含一个整数,表示有序数对 ⟨a,c⟩ 的个数。
6
4 3
5 5
2 3
0 0
17 35
1000000000 1000000000
30
56
19
1
1124
1500000003500000001
对于第一个样例,满足条件的有序数对有 ⟨−4,−3⟩, ⟨−3,−3⟩, ⟨−3,−2⟩, ⟨−2,−3⟩, ⟨−2,−2⟩, ⟨−2,−1⟩, ⟨−1,−3⟩, ⟨−1,−2⟩, ⟨−1,−1⟩, ⟨−1,0⟩, ⟨0,−3⟩, ⟨0,−2⟩, ⟨0,−1⟩, ⟨0,0⟩, ⟨1,−3⟩, ⟨1,−2⟩, ⟨1,−1⟩, ⟨1,0⟩, ⟨2,−3⟩, ⟨2,−2⟩, ⟨2,−1⟩, ⟨2,0⟩, ⟨3,−3⟩, ⟨3,−2⟩, ⟨3,−1⟩, ⟨3,0⟩, ⟨4,−3⟩, ⟨4,−2⟩, ⟨4,−1⟩, ⟨4,0⟩ 这 30 个。
对于 20% 的评测数据,1≤T≤20,0≤A,C≤103。
对于 60% 的评测数据,1≤T≤2⋅103,0≤A,C≤105。
对于 100% 的评测数据,1≤T≤2⋅104,0≤A,C≤109。