不可思议
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一颗节点编号为1~n的,且以1为根的树,给出n组询问,每次询问给定一个数对(x,y),求.
对于这n组询问的答案,不需要依次输出n个数,你只需要输出他们的和对998244353的取模即可。
树的信息以及询问不会直接给出,输入数据只包含随机种子,具体生成方式请仔细阅读备注内容。
示例1

输入

复制
3,1,1,1,1

返回值

复制
7
示例2

输入

复制
4,2,2,3,1

返回值

复制
119

备注:

输入数据包含5个整数,n,seed1,seed2,seed3,x.
树的信息生成伪代码如下
//////////////////////1/////////////////////
定义边集数组u[],v[]     //u[i],v[i]表示第i条边的两个端点
定义变量seed4
定义循环变量i从1到n-1
循环体开始
        seed4=(seed1+seed2)%998244353*seed3%998244353;
        u[i]=i+1;
        v[i]=(seed4%i)+1;
        seed3=seed2;
        seed2=seed1;
        seed1=seed4;
循环体结束
//////////////////////1/////////////////////
询问信息生成伪代码如下,顺带一提,第一次询问的x会在输入中给出
//////////////////////2/////////////////////
定义变量lastans,初始值为0           
定义变量ret,初始值为0
定义变量y,初始值为0          //含义见题干
定义函数ans(x,y),返回值为对数对(x,y)这组询问的答案         //这里“询问”的含义见题干
定义变量z
定义循环变量i从1到n
循环体开始
        z=ans(x,y); 
        ret=(ret+z)%998244353;
        lastans=z;
        x=((x+lastans)^ret)%n+1;
        y=lastans;
循环体结束
//////////////////////2/////////////////////
输出一个整数,表示答案。
n<=10^5,seed1,seed2,seed3<=10^9,x<=n
保证构造出的数据合法。