「LAOI-17」恋色マスタースパーク
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}对于给定的长度为 n 的序列 a_1,a_2,\dots,a_n,定义:

F(a,k)=\sum\limits_{i=1}^n a_i \times [i \bmod k=1]

\hspace{15pt}现在,对于给定的数组 x_1,x_2,\dots,x_n 和一个空的栈,依次将 x_1,x_2,\dots,x_n 入栈。请你构造一个合法的出栈序列 b_1,b_2,\dots,b_n,使得 F(b,k) 的值最大。

【名词解释】
\hspace{15pt}本题公式中的大括号代表艾弗森括号,具体地,[P] = \begin{cases} 1 & \text{如果 } P \text{ 为真} \\ 0 & \text{如果 } P \text{ 为假} \end{cases}
\hspace{15pt}合法的出栈序列:将元素 x_1, x_2, \dots, x_n 按顺序逐个作为入栈的候选元素,期间可以在任意时刻从栈顶弹出一个元素。所有元素均入栈一次、出栈一次。最终在推入所有元素并将栈清空后,所得到的弹出序列即为合法的出栈序列。

输入描述:

\hspace{15pt}第一行输入两个整数 n,k \left(2\le k\le n \le 2\times 10^5 \right)
\hspace{15pt}第二行输入 n 个整数 x_1,x_2,\dots,x_n \left(1\le x_i\le 10^7 \right)

输出描述:

\hspace{15pt}第一行输出一个整数表示 F(b,k) 的值。
\hspace{15pt}第二行输出 n 个整数表示构造的出栈序列 b_1,b_2,\dots,b_n

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
3 2
1 2 3

输出

复制
5
2 1 3

说明

\hspace{15pt}在这个样例中,一种合法的出入栈情况为:1,2 入栈、2,1 出栈、3 入栈、3 出栈。