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 
import java.util.*;
import java.io.*;
import java.math.BigInteger;
 
public class Main
{
	static final int mod = (int)1e9+7;
	static int l = (int)-2e9, r = (int)2e9;
	public static void main(String[] args) throws Exception
	{
		FastReader in = new FastReader();
		PrintWriter out = new PrintWriter(System.out);
		int n = in.nextInt();
		int m = in.nextInt();
		TreeSet<Integer> tree = new TreeSet();
		Set<Integer> set = new HashSet();
		for(int i = 0; i < n; i++)
		{
			int a = in.nextInt();
			tree.add(a);
			set.add(a);
		}
		Set<Integer> arr = new HashSet();
		long  ans = 0;
		while(arr.size() != m)
		{
			Set<Integer> temp = new HashSet();
			for(int i : set)
			{
				if(!arr.contains(i - 1) && !tree.contains(i - 1) && l <= i - 1)
				{
					arr.add(i - 1);
					int k = Integer.MAX_VALUE;
					if(tree.lower(i - 1) != null)
					{
						k = Math.abs(i - 1 - tree.lower(i - 1));
					}
					if(tree.higher(i - 1) != null)
					{
						k = Math.min(k, Math.abs(i - 1 - tree.higher(i - 1)));
					}
					ans += k;
					temp.add(i - 1);
				}
				if(arr.size() == m)
				{
					break;
				}
				if(!arr.contains(i + 1) && !tree.contains(i + 1) && i + 1 <= r)
				{
					arr.add(i + 1);
					int k = Integer.MAX_VALUE;
					if(tree.lower(i + 1) != null)
					{
						k = Math.abs(i + 1 - tree.lower(i + 1));
					}
					if(tree.higher(i + 1) != null)
					{
						k = Math.min(k, Math.abs(i + 1 - tree.higher(i + 1)));
					}
					ans += k;
					temp.add(i + 1);
				}
				if(arr.size() == m)
				{
					break;
				}
			}
			if(arr.size() == m)
			{
				break;
			}
			set = temp;
		}
		out.println(ans);
		for(int i : arr)
		{
			out.print(i + " ");
		}
		out.flush();
	}
}
 
class FastReader
{
	BufferedReader br;
	StringTokenizer st;
 
	public FastReader()
	{
	    br = new BufferedReader(new InputStreamReader(System.in));
	}
 
	public String next() throws IOException
	{
	    if(st == null || !st.hasMoreElements())
	    {
	        st = new StringTokenizer(br.readLine());
	    }

	    return st.nextToken();
	}
 
	public int nextInt() throws IOException
	{
	    return Integer.parseInt(next());
	}
 
	public long nextLong() throws IOException
	{
	    return Long.parseLong(next());
	}
 
	public String nextLine() throws IOException
	{
		return br.readLine();
	}
}