马上就要比赛了,小 D 决定突击学习一些算法。
他要学习的算法共有 $n$ 个,这些算法被依次标号为 $1,2,\cdots,n$。
小 D 根据学习难度以及实用价值等方面,给每个算法定了一个价值。其中,编号为 $i$ 的算法的价值是 $w_i$。
小 D 想要以某种顺序学完所有的这 $n$ 个算法。我们把他学习的顺序可以看做一个 $1,2,\cdots,n$ 的排列 $p$,其中第 $i$ 项 $p_i$ 表示第 $i$ 个学习的算法的编号。
小 D 不希望连续学习的算法之间价值差异过大。对于一种学习方案,他定义这种方案的代价为相邻两个学习的算法的价值差之和。形式化地,对于排列 $p$,我们定义他的权值 $w(p)$ 为:
$$w(p)=\sum_{i=1}^{n-1}\left \lvert w_{p_i}-w_{p_{i+1}} \right \rvert$$
但是,小 D 很快发现了一些问题:有的算法之间具有依赖关系,例如学习 LCT 需要先学习 Splay。小 D 把这些算法分成了两类:基础算法和延伸算法。
基础算法共有 $m$ 个,为了方便,小 D 把它们编号为 $1,2,\cdots,m$;延伸算法是剩下的 $n-m$ 个算法,编号为 $m+1,m+2,\cdots,n$。
对于每个延伸算法 $i(m+1\le i\le n)$,该算法会依赖恰好一个基础算法,记作 $u_i(1\le u_i\le m)$。即,算法 $i$ 必须要在算法 $u_i$ 之后学习。
小 D 想要知道,在所有满足这些依赖关系的学习序列 $p$ 中,$w(p)$ 最小的那一个。
因为小 D 还没开始学这 $n$ 个算法,所以他并不会算。请你帮他求出 $w(p)$ 的最小值,以及一个取到该最小值的排列 $p$。