Moonlight 最近迷上了冒泡排序,今天,他想动手试一试,于是,氧气少年给了 MoonLight 一个长度为 nnn 的排列 ppp,好让他练练手,选择一个最大的、不满足 pi=ip_i=ipi=i 的元素 pip_ipi,然后将其向后移动到位置pip_ipi,其他元素保持原来的顺序不变,现在,氧气少年不小心打乱了这个排列,每种排列出现的概率均等,MoonLight 想知道,操作进行的轮数的期望值。
Moonlight 最近迷上了冒泡排序。今天,他想动手试一试。 于是,氧气少年给了 MoonLight 一个长度为 n(1≤n≤2⋅105)n(1leq nleq 2cdot 10^5)n(1≤n≤2⋅105) 的排列 ppp,好让他练练手。 MoonLight 会不停地进行下面的操作,直到当前排列变成严格递增的排列: 选择一个最大的、不满足 pi=ip_i=ipi=i 的元素 pip_ipi,然后将其向后移动到位置 pip_ipi,其他元素保持原来的顺序不变。 上述过程可以用下面的伪代码表示: 现在,氧气少年不小心打乱了这个排列,每种排列出现的概率均等。 MoonLight 想知道,操作进行的轮数(也就是伪代码中 whiletext{while}while 循环进行的轮数)的期望值。 可以证明,答案可以表示成 pqfrac{p}{q}qp 的形式。其中,p≥0,q≥1,gcd(p,q)=1,qmod 998244353≠0pgeq 0,qgeq 1,gcd(p,q)=1,qmod 998244353neq 0p≥0,q≥1,gcd(p,q)=1,qmod998244353=0。因此你只需输出 p⋅q998244351mod 998244353pcdot q^{998244351}mod 998244353p⋅q998244351mod998244353 即可。