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 toomany {
    public static void main(String[] args) throws IOException {

        BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = new PrintWriter(System.out);
        StringTokenizer st = new StringTokenizer(f.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        Pair[] p = new Pair[2*n];

        int[] ends = new int[n];
        for(int i = 0; i < n; i++){
            st = new StringTokenizer(f.readLine());
            int t1 = Integer.parseInt(st.nextToken());
            int t2 = Integer.parseInt(st.nextToken());

            p[2*i] = new Pair(t1, -1*(i+1));
            p[2*i+1] = new Pair(t2, i+1);
            ends[i] = t2;
        }

        Arrays.sort(p);

        boolean[] removed = new boolean[n];
        int numremoved = 0;
        String ans = "";

        TreeSet<Pair> t = new TreeSet<Pair>();
        int balance = 0;
        for(int i = 0; i < 2*n-1; i++){
            if(p[i].y < 0){
                balance++;
                t.add(new Pair(ends[-1*p[i].y-1], -1*p[i].y));
            }
            else{

                if(!removed[p[i].y-1]){
                    t.remove(new Pair(ends[p[i].y-1], p[i].y));
                    balance--;
                }
            }

            //if peak
            if((p[i].y < 0 && p[i+1].y > 0) || p[i].x != p[i+1].x){
                //check if balance is over k
                while(balance > k){
                    balance--;
                    Pair temp = t.last();
                    t.remove(t.last());
                    removed[temp.y-1] = true;
                    numremoved++;
                    ans+=temp.y;
                    ans+=" ";
                }
            }
        }

        pw.println(numremoved);
        pw.println(ans);
        pw.close();


    }

}

class Pair implements Comparable<Pair>{
    public int x;
    public int y;



    public Pair(int aa, int bb) {
        x = aa;
        y = bb;
    }

    public int compareTo(Pair p){
        int temp = this.x-p.x;
        if(temp == 0){
            return this.y-p.y;
        }
        return temp;
    }

    public String toString(){
        return x + " " + y;
    }


}