Problem: The only difference between easy and hard versions is constraints.

You are given n segments on the coordinate axis OX. Segments can intersect, lie inside each other and even coincide. The i-th segment is [l_i; r_i] (l_i ≤ r_i) and it covers all integer points j such that l_i ≤ j ≤ r_i.

The integer point is called bad if it is covered by strictly more than k segments.

Your task is to remove the minimum number of segments so that there are no bad points at all.

Input

The first line of the input contains two integers n and k (1 ≤ k ≤ n ≤ 200) — the number of segments and the maximum number of segments by which each integer point can be covered.

The next n lines contain segments. The i-th line contains two integers l_i and r_i (1 ≤ l_i ≤ r_i ≤ 200) — the endpoints of the i-th segment.

Output

In the first line print one integer m (0 ≤ m ≤ n) — the minimum number of segments you need to remove so that there are no bad points.

In the second line print m distinct integers p_1, p_2, ..., p_m (1 ≤ p_i ≤ n) — indices of segments you remove in any order. If there are multiple answers, you can print any of them.

Examples

Input


7 2
11 11
9 11
7 8
8 9
7 8
9 11
7 9


Output


3
1 4 7 


Input


5 1
29 30
30 30
29 29
28 30
30 30


Output


3
1 2 4 


Input


6 1
2 3
3 3
2 3
2 2
2 3
2 3


Output


4
1 3 5 6 

Solution (in JAVA):

Solution:
import java.util.*;
import java.io.*;
public class Main
{
    static class Reader
    {
        final private int BUFFER_SIZE = 1 << 16;
        private DataInputStream din;
        private byte[] buffer;
        private int bufferPointer, bytesRead;
        public Reader()
        {
            din = new DataInputStream(System.in);
            buffer = new byte[BUFFER_SIZE];
            bufferPointer = bytesRead = 0;
        }
        public Reader(String file_name) throws IOException
        {
            din = new DataInputStream(new FileInputStream(file_name));
            buffer = new byte[BUFFER_SIZE];
            bufferPointer = bytesRead = 0;
        }
        public String readLine() throws IOException
        {
            byte[] buf = new byte[64]; // line length
            int cnt = 0, c;
            while ((c = read()) != -1)
            {
                if (c == '\n')
                    break;
                buf[cnt++] = (byte) c;
            }
            return new String(buf, 0, cnt);
        }
        public int nextInt() throws IOException
        {
            int ret = 0;
            byte c = read();
            while (c <= ' ')
                c = read();
            boolean neg = (c == '-');
            if (neg)
                c = read();
            do
            {
                ret = ret * 10 + c - '0';
            }  while ((c = read()) >= '0' && c <= '9');
            if (neg)
                return -ret;
            return ret;
        }
        public long nextLong() throws IOException
        {
            long ret = 0;
            byte c = read();
            while (c <= ' ')
                c = read();
            boolean neg = (c == '-');
            if (neg)
                c = read();
            do {
                ret = ret * 10 + c - '0';
            }
            while ((c = read()) >= '0' && c <= '9');
            if (neg)
                return -ret;
            return ret;
        }
        public double nextDouble() throws IOException
        {
            double ret = 0, div = 1;
            byte c = read();
            while (c <= ' ')
                c = read();
            boolean neg = (c == '-');
            if (neg)
                c = read();
            do {
                ret = ret * 10 + c - '0';
            }
            while ((c = read()) >= '0' && c <= '9');
            if (c == '.')
            {
                while ((c = read()) >= '0' && c <= '9')
                {
                    ret += (c - '0') / (div *= 10);
                }
            }
            if (neg)
                return -ret;
            return ret;
        }
        private void fillBuffer() throws IOException
        {
            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
            if (bytesRead == -1)
                buffer[0] = -1;
        }
        private byte read() throws IOException
        {
            if (bufferPointer == bytesRead)
                fillBuffer();
            return buffer[bufferPointer++];
        }
        public void close() throws IOException
        {
            if (din == null)
                return;
            din.close();
        }
    }
    static Reader sc=new Reader();
    static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
    public static void main(String args[])throws IOException
    {
        /*
         * For integer input: int n=inputInt();
         * For long input: long n=inputLong();
         * For double input: double n=inputDouble();
         * For String input: String s=inputString();
         * Logic goes here
         * For printing without space: print(a+""); where a is a variable of any datatype
         * For printing with space: printSp(a+""); where a is a variable of any datatype
         * For printing with new line: println(a+""); where a is a variable of any datatype
         */
        int n=inputInt();
        int k=inputInt(),a,b;
        ArrayList<int[]> ranges=new ArrayList<>();
        ArrayList<triple> trip=new ArrayList<>();
        for(int i=0;i<n;i++){
            a=inputInt();
            b=inputInt();
            ranges.add(new int[]{a,b});
            trip.add(new triple(a,0,i));
            trip.add(new triple(b,1,i));
        }
        Collections.sort(trip);
        TreeSet<triple> ts=new TreeSet<>();
        HashMap<String,triple> hm=new HashMap<>();
        int pos,ind,start;
        int[] removed=new int[n];
        ArrayList<Integer> ans=new ArrayList<>();
        for(int i=0;i<2*n;i++){
            pos=trip.get(i).position;
            start=trip.get(i).startt;
            ind=trip.get(i).index;
            String s=pos+" "+start+" "+ind;
            String s1=ranges.get(ind)[1]+" "+1+" "+ind;
            //System.out.println(s+" "+s1);
            if(start==0){

                triple temp=new triple(ranges.get(ind)[1],1,ind);
                //System.out.println(temp+"        "+ts+" "+ts.contains(temp));
                ts.add(temp);
                //System.out.println(temp+"        "+ts+ " "+ts.contains(temp));

                hm.put(s1,temp);
                //System.out.println("first "+temp+ " "+ ts+" "+hm);
                if(ts.size()>k){
                    triple last=ts.last();
                    //System.out.println("last= "+last);
                    int idx=last.index;
                    ts.remove(ts.last());
                    ans.add(idx+1);
                    removed[idx]=1;
                }
            }else{
                if(removed[ind]==1) continue;
                //triple cur=hm.get(s);
                //System.out.println(hm+" "+cur+" "+s+" "+hm.containsKey(s));
                // System.out.println("second "+s+" "+cur+" "+hm+" "+ts);
                ts.remove(hm.get(s));
            }
            //System.out.println();
        }
        println(ans.size()+"");
        for(int x:ans){
            printSp(x+"");
        }
        bw.flush();
        bw.close();
    }
    public static int inputInt()throws IOException
    {
        return sc.nextInt();
    }
    public static long inputLong()throws IOException
    {
        return sc.nextLong();
    }
    public static double inputDouble()throws IOException
    {
        return sc.nextDouble();
    }
    public static String inputString()throws IOException
    {
        return sc.readLine();
    }
    public static void print(String a)throws IOException
    {
        bw.write(a);
    }
    public static void printSp(String a)throws IOException
    {
        bw.write(a+" ");
    }
    public static void println(String a)throws IOException
    {
        bw.write(a+"\n");
    }
}
class triple implements Comparable<triple>{
    int position,startt,index;
    triple(int p,int s,int id){
        position=p;
        startt=s;
        index=id;
    }
    public int compareTo(triple t){
        if(position==t.position){
            if(startt==t.startt){
                return index-t.index;
            }
            return startt-t.startt;
        }else{
            return position-t.position;
        }
    }

}