题目描述
定义一次泡冒为:

即,从该数组的第一个位置开始,设当前进行到的位置为 i,若 Ai>Ai+1 则交换。
定义一次序排速快为:

即,对于当前递归到的区间 [l,r],定义一个位置 i 为分割点,当且仅当 ∀x∈[l,i],y∈[i+1,r],Ax<Ay。
序排速快的过程是这样的,对于当前的区间 [l,r],若该区间长度为 1,直接返回;
否则,若该区间中存在分割点,则找出所有分割点,递归两两相邻分割点中的区间。
即,若当前递归区间为 [l,r],分割点为 p1,p2,⋯,pk,∀pi∈[l,r] 则递归 $[1,p_1],[p_1+1,p_2],\ldots,[p_{k-1}+1,p_k],[p_{k+1},r]$。
若不存在分割点,则执行多次泡冒,每一次泡冒将 cnt 的值加上 r−l+1,直至出现分割点,执行递归。
给出两个正整数 L,R,对所有的 n∈[L,R] 分别求出所有长度为 n 的排列的 cnt 值之和对 998244353 取模的结果。
输入格式
一行两个正整数 L,R,意义同题目描述。
输出格式
为减少输出量,仅输出一个整数表示所有答案的异或和。
样例
样例 1
2 8
920329
当排列长度为 2 时存在两种排列 1,2,2,1。
对于第一个排列,第一次递归 [1,2] 时,分割点 1,2 都已出现,则递归 [1,1],[2,2],可以发现 cnt 的值为 0。
对于第二个排列,第一次递归 [1,2] 时,无分割点出现,则进行一次泡冒,排列变为 1,2,此时分割点 1,2 均已出现,递归 [1,1],[2,2], 可以发现 cnt 的值为 2。
故对于所有长度为 2 的排列,cnt 的和对 998244353 取模的结果为 2。
长度为 3 时存在 6 种排列,cnt 的值为 17。
长度为 6 时,cnt 的值为 9648。
长度为 8 时,cnt 的值为 1000800。
样例 2,3
见选手目录下的 tros/tros*.in
和 tros/tros*.ans
。
测试点约束
对于 100% 的数据,2≤L,R≤107。
子任务编号 |
R−L+1 |
R |
分值 |
1 |
≤10 |
≤8 |
10 |
2 |
≤500 |
3 |
≤5×103 |
4 |
≤105 |
20 |
5 |
≤106 |
6 |
≤107 |
30 |