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 bisect,sys
#input=sys.stdin.readline
l=input().split()
n=int(l[0])
m=int(l[1])
inf=10**15
l=input().split()
li=[inf,-inf]
for i in l:
    li.append((int(i)))
li.sort()
dist=1
ans=0
diff=[]
for i in range(n+1):
    diff.append(((li[i+1]-li[i]),li[i],li[i+1]))
diff.sort()
diffo=[]
num1=[]
num2=[]
for i in diff:
    diffo.append(i[0])
    num1.append(i[1])
    num2.append(i[2])
l=[]
i=0
done=0
while(1):
    z=bisect.bisect_left(diffo,2*dist)
    for i in range(z,n+1):
        if(num1[i]==inf or num1[i]==-inf):
            continue
        if(len(l)>=m):
            done=1
            break
        ans+=dist
        l.append(num1[i]+dist)
    if(len(l)>=m):
        break
    z=bisect.bisect_left(diffo,2*dist+1)
    for i in range(z,n+1):
        if(num2[i]==inf or num2[i]==-inf):
            continue
        if(len(l)>=m):
            break
        ans+=dist
        l.append(num2[i]-dist)
    if(len(l)>=m):
        break
    dist+=1
print(ans)
for i in l:
    print(i,end=" ")