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.*;
import java.lang.*;
// ArrayList<Integer>[] arr=new ArrayList[n];
public class test1{
	static class pair{
		int x,y,indx;
		pair(int x1,int y1,int i){
			x=x1;y=y1;indx=i;
		}
	}
	/*static double res=0;
	 static void help(int p,int r,int n){
		double tmp=p;
		for(int i=1;i<=n;i++){
			double x=1+(double)r/1200 ;
			tmp*=x;
		}
		res+=tmp;
		int k=100000,m=360;
		for(int i=m;i>0;i--){
			help(k,5,i);
		}
		System.out.println("paid amount "+k*m+" ");
		System.out.println((long)res);
	}*/
	
public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
         StringBuilder sb=new StringBuilder();
         int n=s.nextInt(),k=s.nextInt();
         pair[] arr=new pair[n];
         int l=300,r=-1;
        for(int i=0;i<n;i++){
        	int k1=s.nextInt(),k2=s.nextInt();
        	l=Math.min(k1,l); r=Math.max(k2,r);
        	arr[i]=new pair(k1,k2,i+1);
        }
        Map<Integer,PriorityQueue<pair>>map1=new HashMap<Integer,PriorityQueue<pair>>();
        Map<pair,List<Integer>>map2=new HashMap<>();
        for(int i=l;i<=r;i++){
        	map1.put(i,new PriorityQueue<pair>(new Comparator<pair>(){
        		@Override
        		public int compare(pair p1, pair p2){
        			return p2.y-p1.y;
        		}
        	}));
        	for(pair p:arr){
        		if(p.x<=i&&i<=p.y){
        			map1.get(i).add(p);
        			//System.out.print(i+" -> "+p.indx+" , ");
        		}
        	}
        	if(map1.get(i).size()<=k){map1.remove(i);}
        	else{
        		//System.out.println(map1.get(i).idnx);
        		for(pair v:map1.get(i)){
        			if(map2.get(v)==null){
        				map2.put(v,new ArrayList<Integer>());
        				map2.get(v).add(i);
        			}
        			else{map2.get(v).add(i);}
        			//System.out.print(v.indx+" ");
        		}
        		//System.out.println();
        		
        	}
        	//System.out.println( map1.size()+"  "+map2.size()+" ");;
        }

        int count=0; 
        List<Integer>res=new ArrayList<>();
        for(int xx=l;xx<=r;xx++){
        	if(map1.get(xx)==null){continue;}
        	while(map1.get(xx).size()>k){
        		pair pp=map1.get(xx).peek();
        		if(!map2.containsKey(pp)){
        			map1.get(xx).poll();
        		}
        		else{
        			count++;res.add(pp.indx);
        			for(int a:map2.get(pp)){
        				map1.get(a).remove(pp);
        			}
        			map2.remove(pp);
        		}
        	}
        }
        sb.append(count+" ");
        for(int z:res){sb.append(z+" ");}
        System.out.println(sb);
    }
}