#1814. [AHOI 2021] 收衣服(sort)

[AHOI 2021] 收衣服(sort)

题目背景

你可以选择跳过背景部分。

沉迷于虐待跳蚤游戏的小雪没有发觉时间过了多久,一抬头发现竟然天色大变!天空一片昏黄,一股怪味扑鼻而来。没想到在如此发达的 2077 年,城市中还能碰到沙尘暴,这超现实的场景让小雪怀疑是跳蚤国王显灵。

“别愣着了,快去收衣服呀!”小可可突然想到。

题目描述

看着这么多蒙灰的衣服,他们俩欲哭无泪;而且,有的衣服是没法一起洗的,为了分门别类,小可可给了每件衣服一个 1n1 \sim n 的两两不同的标号,其中 nn 是衣服的件数,把衣服排成 1,2,...,n1, 2,..., n 的顺序再洗会比较方便。

小可可还想到,我们可以把一段连续的晾衣架拿出来,在手上翻转顺序,再放回去。作为 OI 选手的你,马上抽象出了小可可排序衣服的算法:我们设初始时从左往右第 ii 件衣服的标号为 pip_i, 按 1,2,...,n11, 2, ..., n−1 的顺序枚举 ii,设 pi,pi+1,...,pnp_i,p_{i+1},..., p_n 中标号最小的是 pjp_j,那么将 pi,pi+1,...,pj1,pjp_i, p_{i+1},..., p_{j−1}, p_j 左右翻转变成 pj,pj1,...,pi+1,pip_j, p_{j−1},...,p_{i+1}, p_i

小雪很快发现,小可可的算法看似厉害,实际上很傻——在天色的影响下,大家都分不出衣服的标号了。于是他们只能回到房间进行理性愉悦:我们假设左右翻转区间 [i,j][i, j] 的操作代价是 wi,jw_{i,j},一次排序的代价是每次翻转的操作代价之和。现在小可可想知道, pp 取遍 n!n! 种排列时,所有情况的排序代价之和。

只用输出答案对 998244353998244353=7×17×223+1= 7 × 17 × 2^{23} + 1,一个质数)取模后的值。

输入格式

输入文件名为 sort.in

第一行一个整数 nn

下面 n1n − 1 行,第 i(1in)i(1 ≤ i ≤ n)ni+1n − i + 1 个空格隔开的整数,第 jj 个表示 wi,jw_{i,j}

输出格式

输入文件名为 sort.out

一行一个整数表示答案对 998244353998244353 取模的结果。

样例

输入#1

5
1 2 3 4 5
1 2 3 4
1 2 3
1 2

输出#1

1080

解释#1

我们举一个例子,当 p=[3,2,5,1,4]p = [3, 2, 5, 1, 4] 时,算法的执行步骤如下:

• 执行到 i=1i = 1p1,p2,p3,p4,p5p_1, p_2, p_3, p_4, p_53,2,5,1,43, 2, 5, 1, 4 中的最小值为 p4=1p_4 = 1,我们翻转区间 [1,4][1, 4]pp 变为 [1,5,2,3,4][1, 5, 2, 3, 4],代价为 w1,4=4w_{1,4} = 4

• 执行到 i=2i = 2p2,p3,p4,p5p_2, p_3, p_4, p_55,2,3,45, 2, 3, 4 中的最小值为 p3=2p_3 = 2,我们翻转区间 [2,3][2, 3]pp 变为 [1,2,5,3,4][1, 2, 5, 3, 4],代价为 w2,3=2w_{2,3} = 2

• 执行到 i=3i = 3p3,p4,p5p_3, p_4, p_55,3,45, 3, 4 中的最小值为 p4=3p_4 = 3,我们翻转区间 [3,4][3, 4]pp 变为 [1,2,3,5,4][1, 2, 3, 5, 4],代价为 w3,4=2w_{3,4} = 2

• 执行到 i=4i = 4p4,p5p_4, p_55,45, 4 中的最小值为 p5=4p_5 = 4,我们翻转区间 [4,5][4, 5]pp 变为 [1,2,3,4,5][1, 2, 3, 4, 5],代价为 w4,5=2w_{4,5} = 2

可以看到,算法执行到第 ii 步结束时,序列的 [1,i][1, i] 位置上恰好是 [1,i][1, i] 号衣服,算法结束后 pp 被排好了序。这次排序总共付出了 4+2+2+2=104 + 2 + 2 + 2 = 10 的代价。

注意:算法一定会执行 n1n − 1 步,即使中间就排好了序也不会提前退出。

数据范围

提示:本题输入规模较大,请避免使用过慢的输入方式。

• 对于 25% 的数据,保证 1n91 ≤ n ≤ 9

• 对于 50% 的数据,保证 1n161 ≤ n ≤ 16

• 对于 70% 的数据,保证 1n501 ≤ n ≤ 50

• 对于另外 15% 的数据,保证 wi,j=1w_{i,j} = 1

• 对于 100% 的数据,保证 1n5001 ≤ n ≤ 5000wi,j<9982443530 ≤ w_{i,j} < 998244353