看着这么多蒙灰的衣服,他们俩欲哭无泪;而且,有的衣服是没法一起洗的,为了分门别类,小可可给了每件衣服一个 1 ∼ n 的两两不同的标号,其中 n 是衣服的件数,把衣服排成1, 2, . . . , n 的顺序再洗会比较方便。
小可可还想到,我们可以把一段连续的晾衣架拿出来,在手上翻转顺序,再放回去。作为 OI选手的你,马上抽象出了小可可排序衣服的算法:我们设初始时从左往右第 i 件衣服的标号为 pi,按 1, 2, . . . , n−1 的顺序枚举 i,设 pi
, pi+1, . . . , pn 中标号最小的是 pj,那么将 pi
, pi+1, . . . , pj−1, pj左右翻转变成 pj , pj−1, . . . , pi+1, pi。小雪很快发现,小可可的算法看似厉害,实际上很傻——在天色的影响下,大家都分不出衣服的标号了。于是他们只能回到房间进行理性愉悦:我们假设左右翻转区间 [i, j] 的操作代价是
wi,j,一次排序的代价是每次翻转的操作代价之和。现在小可可想知道,当p取遍n!种排列时,所有情况的排序代价之和。
只用输出答案对 998244353(= 7 × 17 × 2 23+ 1,一个质数)取模后的值。
第一行一个整数 n。
下面 n − 1 行,第 i(1 ≤ i ≤ n) 行 n − i + 1个空格隔开的整数,第 j 个表示 wi,j。
一行一个整数表示答案对 998244353 取模的结果。
【样例解释】
我们举一个例子,当 p = [3, 2, 5, 1, 4] 时,算法的执行步骤如下:
•
执行到 i = 1,p1, p2, p3, p4, p5 即 3, 2, 5, 1, 4 中的最小值为 p4 = 1,我们翻转区间 [1, 4],p
变为 [1, 5, 2, 3, 4],代价为 w1,4 = 4;
•
执行到 i = 2,p2, p3, p4, p5 即 5, 2, 3, 4 中的最小值为 p3 = 2,我们翻转区间 [2, 3],p 变为
[1, 2, 5, 3, 4],代价为 w2,3
= 2;
•
执行到 i = 3,p3, p4, p5
即 5, 3, 4 中的最小值为 p4 = 3,我们翻转区间 [3, 4],p 变为
[1, 2, 3, 5, 4],代价为 w3,4
= 2;
•
执行到 i = 4,p4, p5 即 5, 4 中的最小值为 p5 = 4,我们翻转区间 [4, 5],p 变为 [1, 2, 3, 4, 5],
代价为 w4,5 = 2。
可以看到,算法执行到第 i 步结束时,序列的 [1, i] 位置上恰好是 [1, i] 号衣服,算法结束后
p 被排好了序。这次排序总共付出了 4 + 2 + 2 + 2 = 10 的代价。
注意:算法一定会执行n − 1步,即使中间就排好了序也不会提前退出。