#P808. 升序排列(三)

升序排列(三)

题目描述

如果有一个 1∼n1 \sim n 的排列 p1,p2,…,pnp_1,p_2,\ldots,p_n,假设存在这样一个排序算法:按 1,2,…,n−11,2,\ldots,n-1 的顺序枚举 ii,设 pi,pi+1,…,pnp_i,p_{i+1},\ldots,p_n 中标号最小的是 pjp_j,那么将 pi,pi+1,…,pj−1,pjp_i,p_{i+1},\ldots,p_{j-1},p_j 左右翻转变成 pj,pj−1,…,pi+1,pip_j,p_{j-1},\ldots,p_{i+1},p_i,以此类推,知道 n−1n-1 步全部执行完成。且该算法一定会执行 n−1n − 1 步,即使中间就排好了序也不会提前退出。

我们假设左右翻转区间 [i,j][i,j] 的操作代价是 ai,ja_{i,j},一次排序的代价是每次翻转的操作代价之和。现在请你计算出,当 pp 取遍 n!n! 种排列时,所有情况的排序代价之和,并对答案模 998244353998244353。

输入格式

输入第一行,一个整数 nn。 接下来 n−1n-1 行,第 i(1≤i<n)i(1 \le i \lt n) 行 n−i+1n - i + 1 个空格隔开的整数,第 jj 个表示 ai,i+j−1a_{i,i+j-1}。

输出格式

输出共一个正整数,表示所求答案。

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

数据范围

  • 对于20%20\%的数据,1≤n≤101\leq n \leq 10
  • 对于50%50\%的数据,1≤n≤161\leq n \leq 16
  • 对于70%70\%的数据,1≤n≤501\leq n \leq 50
  • 对于100%100\%的数据,1≤n≤5001\leq n \leq 500 , 1≤ai,j≤9982443531 \leq a_{i,j} \leq 998244353