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 
//package main;

import java.io.*;
import java.util.*;

public final class Main {
    BufferedReader br;
    StringTokenizer stk;
    
    public static void main(String[] args) throws Exception {
        new Main().run();
    }
    
    {
        stk = null;
        br = new BufferedReader(new InputStreamReader(System.in));
    }
    
    long mod = 998244353;
    StringBuilder res = new StringBuilder(100005);
    void run() throws Exception {
        int n = ni();
        int m = ni();
        Queue<Long> queue = new LinkedList<>();
        TreeSet<Long> trees = new TreeSet<>();
        for(int i = 0; i < n; i++) {
            long tree = nl();
            trees.add(tree);
            queue.add(tree);
        }
        
        HashSet<Long> people = new HashSet<>();
        while(people.size() < m) {
            long cur = queue.remove();
            long back = cur - 1;
            long front = cur + 1;
            if(!people.contains(back) && !trees.contains(back)) {
                people.add(back);
                queue.add(back);
            }
            if(people.size() == m) break;
            if(!people.contains(front) && !trees.contains(front)) {
                people.add(front);
                queue.add(front);
            }
        }
        
        long total = 0;
        for(long person : people) {
            long min = Integer.MAX_VALUE;
            if(trees.lower(person) != null) {
                min = Math.min(min, Math.abs(trees.lower(person) - person));
            }
            if(trees.higher(person) != null) {
                min = Math.min(min, Math.abs(trees.higher(person) - person));
            }
            total += min;
        }
        
        res.append(total).append("\n");
        for(long person : people) {
            res.append(person).append(" ");
        }
        
        System.out.println(res.deleteCharAt(res.length() - 1));
    }
    
    //Reader & Writer
    String nextToken() throws Exception {
        if (stk == null || !stk.hasMoreTokens())
            stk = new StringTokenizer(br.readLine(), " ");
        return stk.nextToken();
    }

    String nt() throws Exception {
        return nextToken();
    }

    int ni() throws Exception {
        return Integer.parseInt(nextToken());
    }

    long nl() throws Exception {
        return Long.parseLong(nextToken());
    }
    
    double nd() throws Exception {
        return Double.parseDouble(nextToken());
    }
    
    //Some Misc methods
    int get(int l, int r, int[] a) {
        return l == 0 ? a[r] : a[r] - a[l - 1];
    }
    
    void shuffle(long[] a) {
        Random r = new Random();
        for(int i = 0; i < a.length; i++) {
            int idx = r.nextInt(a.length);
            long temp = a[i];
            a[i] = a[idx];
            a[idx] = temp;
        }
    }
    
    void reverse(char[] a) {
        for(int i = 0, j = a.length - 1; i < j; i++, j--) {
            char temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }
    
    void prefix(int[] a) {
        for(int i = 1; i < a.length; i++)
            a[i] += a[i - 1];
    }
    
    void suffix(int[] a) {
        for(int i = a.length - 2; i >= 0; i--)
            a[i] += a[i + 1];
    }
    
    long[] pow2(int n) {
        long[] pow = new long[n];
        pow[0] = 1;
        for(int i = 1; i < n; i++)
            pow[i] = pow[i - 1] << 1;
        return pow;
    }
}