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.*;
public class Main{
static int max = (int)(1e9)+7;
public static PrintWriter out = new PrintWriter (new BufferedOutputStream(System.out));
	public static void main(String sp[])throws IOException{
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		int m = sc.nextInt();
		long arr[] = new long[n+2];
		for(int i=1;i<=n;i++)
			arr[i]=sc.nextLong();
		
		TreeMap<Long,Long> hm = new TreeMap<>();
		for(int i=1;i<=n;i++)
			hm.put(arr[i],0l);
		LinkedList<Long> ll = new LinkedList<>();
		TreeMap<Long,Long> dist = new TreeMap<>();
		for(int i=1;i<=n;i++){
			long val =arr[i];
			if(!hm.containsKey(val-1)){
				ll.addLast(val-1);
				dist.put(val-1,1l);
			}
			if(!hm.containsKey(val+1)){
				ll.addLast(val+1);
				dist.put(val+1,1l);
			}
		}
		
		long persons =0 ;
		int fill =0 ;
		int itr = 0;
		long total =0 ;
		ArrayList<Long> ans = new ArrayList<>();
		
		while(fill!=m){
			long val = ll.removeFirst();
			long count = dist.get(val);
			if(!hm.containsKey(val)){
				total += count;
				hm.put(val,0l);
				ans.add(val);
				fill++;
				if(!hm.containsKey(val-1)){
					ll.addLast(val-1);
					if(!dist.containsKey(val-1))
						dist.put(val-1,count+1l);
					else dist.put(val-1, Math.min(dist.get(val-1) , count+1));
				}
				if(fill==m){
					break;
				}
				if(!hm.containsKey(val+1)){
					ll.addLast(val+1);
					if(!dist.containsKey(val+1))
						dist.put(val+1,count+1l);
					else dist.put(val+1, Math.min(dist.get(val+1) , count+1));
				}
				if(fill==m){
					break;
				}
			}
				
		}
		
		
		StringBuilder sb = new StringBuilder();
		for(Long val : ans)
			sb.append(val+" ");
		System.out.println(total);
		System.out.println(sb.toString());
		
		
		
		
	}
	
	
	
	
	public static class FastReader {
		BufferedReader br;
		StringTokenizer st;


		public FastReader() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreTokens()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (Exception r) {
					r.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());//converts string to integer
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		String nextLine() {
			String str = "";
			try {
				str = br.readLine();
			} catch (Exception r) {
				r.printStackTrace();
			}
			return str;
		}
	}

}