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.awt.Point;
import java.io.*;

public class Main{
    public static void read(long[] a,int n) throws IOException{for (int i=0;i<n;i++){a[i]=Reader.nextLong();}}
    public static String print(int[] a,int n,String c){String A=""; for (int i : a){ A+=i+c;} return A;}
    public static String send(String a,String b){ if (a.charAt(0)==b.charAt(0)){ if (a.equals("R")){ return "B";}else if(a.equals("B")){ return "G";}else{ return "R";}}
                                                  else{ if (a.equals("R") && b.equals("B") || a.equals("B") && b.equals("R")){ return "G";}else if (a.equals("R") && b.equals("G") || a.equals("G") && b.equals("R")){ return "B";}else { return "R";}}
                                                }
    
    public static void main(String[] args) throws IOException{
        Reader scan = new Reader();
        scan.init(System.in);
        OutputStream output = System.out;
        PrintWriter out = new PrintWriter(output);
        int n = scan.nextInt();
        int m = scan.nextInt();
        Queue<Point> q = new LinkedList<>();
        ArrayList<Point> arr = new ArrayList<>();
        HashSet<Integer> set = new HashSet<>(); 
        for (int i=0;i<n;i++){
            int A = scan.nextInt();
            q.add(new Point(A,0));
            set.add(A);
        }
        long ans = 0;
        while(arr.size()<m){
            Point A = q.poll();
            if (!set.contains(A.x+1)){
                ans += A.y+1;
                arr.add(new Point(A.x+1,A.y+1));
                set.add(A.x+1);
                q.add(new Point(A.x+1,A.y+1));
            }
            if (arr.size()<m && !set.contains(A.x-1)){
                ans += A.y+1;
                arr.add(new Point(A.x-1,A.y+1));
                set.add(A.x-1);
                q.add(new Point(A.x-1,A.y+1));
            }
        }
        out.println(ans);
        for (Point i : arr){
            out.print(i.x+" ");
        }
        out.println();
        out.close();
    }
}
class Comp implements Comparator<String>{
    public int compare(String a,String b){
        return (b.length()-a.length());
    } 
}
class dsu{
    int[] arr;
    dsu(int N){
        arr = new int[N];
        for (int i=0;i<N;i++){
            arr[i] = i;
        }
    }
    public void joint(int A,int B){
        int a = find(A);
        int b = find(B);
        arr[a] = b;
    }
    public int find(int A){
        while(A!=arr[A]){
            A = arr[A];
        }
        return A;
    }
}
class Reader {
    static BufferedReader reader;
    static StringTokenizer tokenizer;
    static void init(InputStream input) {
        reader = new BufferedReader(
                     new InputStreamReader(input) );
        tokenizer = new StringTokenizer("");
    }
    static String next() throws IOException {
        while ( ! tokenizer.hasMoreTokens() ) {
            tokenizer = new StringTokenizer(
                   reader.readLine() );
        }
        return tokenizer.nextToken();
    }
    static int nextInt() throws IOException {
        return Integer.parseInt( next() );
    }
    static long nextLong() throws IOException {
        return Long.parseLong( next() );
    }
    static double nextDouble() throws IOException {
        return Double.parseDouble( next() );
    }
}