There are n Christmas trees on an infinite number line. The i-th tree grows at the position x_i. All x_i are guaranteed to be distinct.

Each integer point can be either occupied by the Christmas tree, by the human or not occupied at all. Non-integer points cannot be occupied by anything.

There are m people who want to celebrate Christmas. Let y_1, y_2, ..., y_m be the positions of people (note that all values x_1, x_2, ..., x_n, y_1, y_2, ..., y_m should be distinct and all y_j should be integer). You want to find such an arrangement of people that the value ∑_{j=1}^{m}min_{i=1}^{n}|x_i - y_j| is the minimum possible (in other words, the sum of distances to the nearest Christmas tree for all people should be minimized).

In other words, let d_j be the distance from the j-th human to the nearest Christmas tree (d_j = min_{i=1}^{n} |y_j - x_i|). Then you need to choose such positions y_1, y_2, ..., y_m that ∑_{j=1}^{m} d_j is the minimum possible.

Input

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 2 ⋅ 10^5) — the number of Christmas trees and the number of people.

The second line of the input contains n integers x_1, x_2, ..., x_n (-10^9 ≤ x_i ≤ 10^9), where x_i is the position of the i-th Christmas tree. It is guaranteed that all x_i are distinct.

Output

In the first line print one integer res — the minimum possible value of ∑_{j=1}^{m}min_{i=1}^{n}|x_i - y_j| (in other words, the sum of distances to the nearest Christmas tree for all people).

In the second line print m integers y_1, y_2, ..., y_m (-2 ⋅ 10^9 ≤ y_j ≤ 2 ⋅ 10^9), where y_j is the position of the j-th human. All y_j should be distinct and all values x_1, x_2, ..., x_n, y_1, y_2, ..., y_m should be distinct.

If there are multiple answers, print any of them.

Examples

Input


2 6
1 5


Output


8
-1 2 6 4 0 3 


Input


3 5
0 3 1


Output


7
5 -2 4 -1 2 
// practice with rainboy
import java.io.*;
import java.util.*;

public class CF1283D extends PrintWriter {
	CF1283D() { super(System.out, true); }
	Scanner sc = new Scanner(System.in);
	public static void main(String[] $) {
		CF1283D o = new CF1283D(); o.main(); o.flush();
	}

	Random rand = new Random();
	void sort(int[] aa, int n) {
		for (int i = 0; i < n; i++) {
			int j = rand.nextInt(i + 1);
			int tmp = aa[i]; aa[i] = aa[j]; aa[j] = tmp;
		}
		Arrays.sort(aa, 0, n);
	}
	void main() {
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] xx = new int[n];
		for (int i = 0; i < n; i++)
			xx[i] = sc.nextInt();
		sort(xx, n);
		int[] ll = new int[n + m / 2 + 1];
		int[] rr = new int[n + m / 2 + 1];
		int[] dd = new int[n + m / 2 + 1]; Arrays.fill(dd, 1);
		ll[0] = xx[n - 1] + 1;
		rr[0] = xx[0] - 1;
		int head = 0, cnt = 1;
		for (int i = 1; i < n; i++) {
			int l = xx[i - 1] + 1;
			int r = xx[i] - 1;
			if (l <= r) {
				ll[head + cnt] = l;
				rr[head + cnt] = r;
				cnt++;
			}
		}
		int[] yy = new int[m];
		long sum = 0;
		for (int j = 0; j < m; )
			if (ll[head] == rr[head]) {
				yy[j++] = ll[head];
				sum += dd[head];
				head++; cnt--;
			} else {
				yy[j++] = ll[head];
				sum += dd[head];
				if (j < m) {
					yy[j++] = rr[head];
					sum += dd[head];
				}
				if (ll[head] + 1 == rr[head]) {
					head++; cnt--;
				} else {
					ll[head + cnt] = ll[head] + 1;
					rr[head + cnt] = rr[head] - 1;
					dd[head + cnt] = dd[head] + 1;
					head++;
				}
			}
		println(sum);
		for (int j = 0; j < m; j++)
			print(yy[j] + " ");
		println();
	}
}
