Problem:
Score : 1000 points

Problem Statement

Snuke participated in a magic show.

A magician prepared N identical-looking boxes.
He put a treasure in one of the boxes, closed the boxes, shuffled them, and numbered them 1 through N.

Since the boxes are shuffled, now Snuke has no idea which box contains the treasure.
Snuke wins the game if he opens a box containing the treasure.
You may think that if Snuke opens all boxes at once, he can always win the game.
However, there are some tricks:

Snuke must open the boxes one by one. After he opens a box and checks the content of the box, he must close the box before opening the next box.

He is only allowed to open Box i at most a_i times.

The magician may secretly move the treasure from a closed box to another closed box, using some magic trick.
For simplicity, assume that the magician never moves the treasure while Snuke is opening some box.
However, he can move it at any other time (before Snuke opens the first box, or between he closes some box and opens the next box).

The magician can perform the magic trick at most K times.

Can Snuke always win the game, regardless of the initial position of the treasure and the movements of the magician?

Constraints

2 \leq N \leq 50

1 \leq K \leq 50

1 \leq a_i \leq 100

Input

Input is given from Standard Input in the following format:

N K
a_1 a_2 \cdots a_N

Output

If the answer is no, print a single -1.

Otherwise, print one possible move of Snuke in the following format:

Q
x_1 x_2 \cdots x_Q

It means that he opens boxes x_1, x_2, \cdots, x_Q in this order.

In case there are multiple possible solutions, you can output any.

Sample Input 1

2 1
5 5

Sample Output 1

7
1 1 2 1 2 2 1

If Snuke opens the boxes 7 times in the order 1 \rightarrow 1 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 2 \rightarrow 1, he can always find the treasure regardless of its initial position and the movements of the magician.

Sample Input 2

3 50
5 10 15

Sample Output 2

-1

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.PrintStream;
import java.util.stream.IntStream;
import java.util.Arrays;
import java.io.IOException;
import java.io.Reader;
import java.io.InputStreamReader;
import java.util.OptionalInt;
import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.util.Comparator;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        MyInput in = new MyInput(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        AMagic solver = new AMagic();
        solver.solve(1, in, out);
        out.close();
    }

    static class AMagic {
        public void solve(int testNumber, MyInput in, PrintWriter out) {
            int n = in.nextInt();
            int K = in.nextInt();
            int[][] a = new int[n][];
            for (int i = 0; i < n; i++) {
                a[i] = new int[]{in.nextInt(), i + 1};
            }
            List<Integer> ans = new ArrayList<>();
            LOOP:
            for (int i = 0; ; i++) {
                Arrays.sort(a, Comparator.comparingInt(x -> -x[0]));
                for (int j = 0; j < n; j++) {
                    if (a[j][0]-- == 0) break LOOP;
                    ans.add(a[j][1]);
                }
                for (int j = 0; j < n; j++) {
//                if (j == n - 2 && i % 2 == 1) continue;
                    if (j == n - 1 && i % 2 == 0) continue;
                    if (a[j][0]-- == 0) break LOOP;
                    ans.add(a[j][1]);
                }
            }
            dump(ans);
            if (solve(n, ans) <= K) {
                out.println(-1);
                return;
            }
            out.println(ans.size());
            printList(out, ans);
        }

        int solve(int n, List<Integer> ans) {
            int[][] dp = new int[ans.size() + 1][n];
            for (int[] d : dp) Arrays.fill(d, 1 << 29);
            Arrays.fill(dp[ans.size()], 0);
            for (int i = ans.size() - 1; i >= 0; i--) {
                for (int j = 0; j < n; j++) {
                    for (int k = 0; k < n; k++) {
                        if (ans.get(i) == j + 1 && j == k) continue;
                        dp[i][j] = Math.min(dp[i][j], dp[i + 1][k] + (j == k ? 0 : 1));
                    }
                }
            }
            return Arrays.stream(dp[0]).min().getAsInt();
        }

        static void printList(PrintWriter out, List<?> p) {
            for (int i = 0; i < p.size(); i++) {
                out.print(p.get(i) + (i == p.size() - 1 ? "\n" : " "));
            }
        }

        static void dump(Object... o) {
            System.err.println(Arrays.deepToString(o));
        }

    }

    static class MyInput {
        private final BufferedReader in;
        private static int pos;
        private static int readLen;
        private static final char[] buffer = new char[1024 * 8];
        private static char[] str = new char[500 * 8 * 2];
        private static boolean[] isDigit = new boolean[256];
        private static boolean[] isSpace = new boolean[256];
        private static boolean[] isLineSep = new boolean[256];

        static {
            for (int i = 0; i < 10; i++) {
                isDigit['0' + i] = true;
            }
            isDigit['-'] = true;
            isSpace[' '] = isSpace['\r'] = isSpace['\n'] = isSpace['\t'] = true;
            isLineSep['\r'] = isLineSep['\n'] = true;
        }

        public MyInput(InputStream is) {
            in = new BufferedReader(new InputStreamReader(is));
        }

        public int read() {
            if (pos >= readLen) {
                pos = 0;
                try {
                    readLen = in.read(buffer);
                } catch (IOException e) {
                    throw new RuntimeException();
                }
                if (readLen <= 0) {
                    throw new MyInput.EndOfFileRuntimeException();
                }
            }
            return buffer[pos++];
        }

        public int nextInt() {
            int len = 0;
            str[len++] = nextChar();
            len = reads(len, isSpace);
            int i = 0;
            int ret = 0;
            if (str[0] == '-') {
                i = 1;
            }
            for (; i < len; i++) ret = ret * 10 + str[i] - '0';
            if (str[0] == '-') {
                ret = -ret;
            }
            return ret;
        }

        public char nextChar() {
            while (true) {
                final int c = read();
                if (!isSpace[c]) {
                    return (char) c;
                }
            }
        }

        int reads(int len, boolean[] accept) {
            try {
                while (true) {
                    final int c = read();
                    if (accept[c]) {
                        break;
                    }
                    if (str.length == len) {
                        char[] rep = new char[str.length * 3 / 2];
                        System.arraycopy(str, 0, rep, 0, str.length);
                        str = rep;
                    }
                    str[len++] = (char) c;
                }
            } catch (MyInput.EndOfFileRuntimeException e) {
            }
            return len;
        }

        static class EndOfFileRuntimeException extends RuntimeException {
        }

    }
}