General Payne has a battalion of n soldiers. The soldiers' beauty contest is coming up, it will last for k days. Payne decided that his battalion will participate in the pageant. Now he has choose the participants.

All soldiers in the battalion have different beauty that is represented by a positive integer. The value ai represents the beauty of the i-th soldier.

On each of k days Generals has to send a detachment of soldiers to the pageant. The beauty of the detachment is the sum of the beauties of the soldiers, who are part of this detachment. Payne wants to surprise the jury of the beauty pageant, so each of k days the beauty of the sent detachment should be unique. In other words, all k beauties of the sent detachments must be distinct numbers.

Help Payne choose k detachments of different beauties for the pageant. Please note that Payne cannot just forget to send soldiers on one day, that is, the detachment of soldiers he sends to the pageant should never be empty.

Input

The first line contains two integers n, k (1 ≤ n ≤ 50; 1 ≤ k ≤  <image>) — the number of soldiers and the number of days in the pageant, correspondingly. The second line contains space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 107) — the beauties of the battalion soldiers.

It is guaranteed that Payne's battalion doesn't have two soldiers with the same beauty.

Output

Print k lines: in the i-th line print the description of the detachment that will participate in the pageant on the i-th day. The description consists of integer ci (1 ≤ ci ≤ n) — the number of soldiers in the detachment on the i-th day of the pageant and ci distinct integers p1, i, p2, i, ..., pci, i — the beauties of the soldiers in the detachment on the i-th day of the pageant. The beauties of the soldiers are allowed to print in any order.

Separate numbers on the lines by spaces. It is guaranteed that there is the solution that meets the problem conditions. If there are multiple solutions, print any of them.

Examples

Input

3 3
1 2 3


Output

1 1
1 2
2 3 2


Input

2 1
7 12


Output

1 12 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.InputMismatchException;

/**
 * @author Roman Dzhadan
 * @E-Mail dflash36@gmail.com
 * @Skype ronex36
 */

public class Main {

    public static IO type = IO.STANDART;

    public static int MEMORY_LIMIT = 256;
    public static int TIME_LIMIT = 2;

    public static String inputFileName = "input.txt";
    public static String outputFileName = "output.txt";

    public static InputReader in;
    public static OutputWriter out;

    public static void main(String[] args) throws IOException {
        configure();
        Task task = new Task();
        task.solve(in, out);
        out.close();
    }

    private static void configure() throws FileNotFoundException {
        if (type == IO.FILE) {
            InputStream fileIn = new FileInputStream(new File(inputFileName));
            OutputStream fileOut = new FileOutputStream(new File(outputFileName));
            in = new InputReader(fileIn);
            out = new OutputWriter(fileOut);
        }

        if (type == IO.STANDART) {
            InputStream stdIn = System.in;
            OutputStream stdOut = System.out;
            in = new InputReader(stdIn);
            out = new OutputWriter(stdOut);
        }
    }
}

/** Your solution starts here: **/
class Task {
    
    public void solve(InputReader in, OutputWriter out) throws IOException {
        
        int n = in.readInt();
        int m = in.readInt();
        int[]tab = new int[n];
        for (int i = 0; i < tab.length; i++) {
            tab[i] = in.readInt();
        }
        Arrays.sort(tab);
        ArrayList<Integer>all = new ArrayList<Integer>();
        
        int last = 0;
        int nn = n - 1;
        
        while (m > 0) {
            
            System.out.print((all.size() + 1) + " ");
            for (int i = 0; i < all.size(); i++) {
                System.out.print(all.get(i) + " ");
            }
            if (nn == last) {
                all.add(tab[last]);
                System.out.print(tab[last]);
                nn--;
                last = 0;
            }
            else {
                System.out.print(tab[last]);
                last++;
            }
            System.out.println();
            m--;
        }
    }
}   

class InputReader {
    private InputStream stream;
    private byte[] buf = new byte[1024];
    private int curChar;
    private int numChars;
    public InputReader(InputStream stream) {this.stream = stream;}
    public int read() {if(numChars==-1)throw new InputMismatchException();if(curChar>=numChars){curChar=0;try{numChars=stream.read(buf);}catch(IOException e){throw new InputMismatchException();}if (numChars<=0)return -1;}return buf[curChar++];}
    public int readInt() {int c=read();while(isSpaceChar(c))c=read();int sgn=1;if(c=='-'){sgn=-1;c=read();}int res=0;do{if(c<'0'||c>'9')throw new InputMismatchException();res*=10;res+=c-'0';c=read();}while(!isSpaceChar(c));return res * sgn;}
    public long readLong() {int c=read();while(isSpaceChar(c))c=read();int sgn=1;if(c=='-'){sgn=-1;c=read();}long res=0;do{if(c<'0'||c>'9')throw new InputMismatchException();res*=10;res+=c-'0';c=read();}while(!isSpaceChar(c));return res*sgn;}
    public String readString() {int c=read();while(isSpaceChar(c))c=read();StringBuffer res=new StringBuffer();do{res.appendCodePoint(c);c = read();} while (!isSpaceChar(c));return res.toString();}
    public char readCharacter() {int c = read();while (isSpaceChar(c))c = read();return (char) c;}
    public static boolean isSpaceChar(int c) {return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;}
    public double readDouble() {int c = read();while (isSpaceChar(c))c = read();int sgn = 1;if (c == '-') {sgn = -1;c = read();}double res = 0;while (!isSpaceChar(c) && c != '.') {if (c == 'e' || c == 'E')return res * Math.pow(10, readInt());if (c < '0' || c > '9')throw new InputMismatchException();res *= 10;res += c - '0';c = read();}if (c == '.') {c = read();double m = 1;while (!isSpaceChar(c)) {if (c == 'e' || c == 'E')return res * Math.pow(10, readInt());if (c < '0' || c > '9')throw new InputMismatchException();m /= 10;res += (c - '0') * m;c = read();}}return res * sgn;}
    private String readLine0() {StringBuilder buf = new StringBuilder();int c = read();while (c != '\n' && c != -1) {if (c != '\r')buf.appendCodePoint(c);c = read();}return buf.toString();}
    public String readLine() {String s = readLine0();while (s.trim().length() == 0)s = readLine0();return s;}
    public String readLine(boolean ignoreEmptyLines) {if (ignoreEmptyLines)return readLine();else return readLine0();}
    public BigInteger readBigInteger() {try {return new BigInteger(readString());} catch (NumberFormatException e) {throw new InputMismatchException();}}
    public int peek() {if (numChars == -1)return -1;if (curChar >= numChars) {curChar = 0;try {numChars = stream.read(buf);} catch (IOException e) {return -1;}if (numChars <= 0)return -1;}return buf[curChar];}
    public boolean isEOF() {int value;while (isSpaceChar(value = peek()) && value != -1)read();return value == -1;}
}

class OutputWriter {
    private final PrintWriter writer;
    public OutputWriter(OutputStream outputStream) {writer = new PrintWriter(outputStream);}
    public void print(Object... objects) {for (int i = 0; i < objects.length; i++) {if (i != 0)writer.print(' ');writer.print(objects[i]);}}
    public void printLine(Object... objects) {print(objects);writer.println();}
    public void close() {writer.close();}
}

class Utils {

    public static long MOD = 1000 * 1000 * 1000 + 9;

    public static boolean[] getEratosfenSieve(int size) {
        boolean[] prime = new boolean[size + 1];
        Arrays.fill(prime, true);
        prime[0] = prime[1] = false;
        for (int i = 2; i <= size; ++i)
            if (prime[i])
                if (i * 1L * i <= size * 1L)
                    for (int j = i * i; j <= size; j += i)
                        prime[j] = false;
        return prime;
    }

    public static int getCodeGray(int n) {
        return n ^ (n >> 1);
    }

    public static int gcd(int a, int b) {
        if (b == 0)
            return a;
        else
            return gcd(b, a % b);
    }

    public static int lcm(int a, int b) {
        return a / gcd(a, b) * b;
    }

    public static long binPower(long base, long exponent, long mod) {
        if (exponent == 0)
            return 1;
        long result = binPower(base, exponent >> 1, mod);
        result = result * result % mod;
        if ((exponent & 1) != 0)
            result = result * base % mod;
        return result;
    }
}

enum IO {
    FILE, STANDART
}