小红的数轴移动(二)
题号:NC279768
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

小红站在数轴的x点上,她准备进行n次操作,每次操作如下:
1. 若小红站在原点,则原地不动。
2. 否则按朝原点的方向,移动a_i距离。

小红可以自己选择操作的先后次序。她希望给出一个方案,使得最终移动的总距离最小,你能帮帮她吗?

输入描述:

第一行输入两个整数n,x,用空格隔开。分别代表小红的操作数量、小红的初始位置。
第二行输入n个正整数a_i,代表小红每次操作移动的距离(若移动)。
1\leq n \leq 100
-100 \leq x \leq 100
1\leq a_i \leq 100

输出描述:

第一行输出一个整数,代表小红移动的最小总距离。
第二行输入n个正整数p_i,代表第i次准备移动的距离为a_{p_i}。请保证输出的p数组为一个长度为n的排列。有多解时输出任意即可。保证有解。
示例1

输入

复制
5 1
5 4 3 2 1

输出

复制
1
5 1 2 3 4

说明

小红第一步进行操作5,想左移动1距离来到原点,后面四次操作均不移动。
因此输出的排列只需要保证第一个元素为5即可。