#P761222006. 恶心的运算

恶心的运算

当前没有测试数据。

题目背景

gzx 是大费玩家,ltz 是小费玩家,他们王不见王。

长期以来,gzx 认为异或运算是 C++C++ 最恶心的运算,拥有最低的优先级;ltz 认为取模运算是 C++C++ 最恶心的运算,拥有最大的常数。

屏幕截图 2025-09-07 170217.png

在 C++ 中,可以用 “^” 表示异或。

为了区分谁才是最恶心的运算,他们决定算对方觉得最恶心的运算,先算错的人失去竞争最恶心运算资格。

gzx:咪咪咪咪咪咪咪。

ltz:?

gzx:我算的 187066%187008=58187066 \% 187008 = 58,你算的 187066187088=58187066 \oplus 187088 = 58,你肯定算错了。

ltz:……

题目描述

正所谓王不见王,ltz 不能和 gzx 解释这个问题,所以他想到可以让你解决。

ltz 会给你多组的四个正整数 {la,ra,lb,rb}\{ l_a , r_a , l_b , r_b \},你需要告诉 gzx 有多少 laaral_a \le a \le r_albbrbl_b \le b \le r_b 满足 a%b=aba \% b = a \oplus b

格式

输入格式

第一行给出一个非负整数 TT 表示数据组数。

之后 TT 行,每行四个正整数 la,ra,lb,rbl_a , r_a , l_b , r_b,表示一组询问

输出格式

对于每一组询问,输出答案对 998244353998244353 取模的结果。

样例

3
1 5 1 5
1 10 1 5
1 5 1 10

7
10
7

2
6 10 1 5
1 5 6 10

3
0

提示

对于 5%5\% 的数据,T=0T = 0
对于 15%15\% 的数据,ra80r_a \le 80rb80r_b \le 80
对于 30%30\% 的数据,ra10000r_a \le 10000rb80r_b \le 80
对于 45%45\% 的数据,rar_arb5000r_b \le 5000
对于 70%70\% 的数据,ra,rb109r_a,r_b \le 10^9
对于 100%100\% 的数据,T105T \le 10^5lara1018l_a \le r_a \le 10^{18}lbrb1018l_b \le r_b \le 10^{18}