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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String[] cmd=br.readLine().split(" ");
        int n=Integer.valueOf(cmd[0]);
        int k=Integer.valueOf(cmd[1]);
        int[] points=new int[210];
        int[][] seg=new int[n][2];
        for(int i=0;i<n;i++)
        {
        	cmd=br.readLine().split(" ");
        	int l=Integer.valueOf(cmd[0]);
        	int r=Integer.valueOf(cmd[1]);
        	seg[i][0]=l;
        	seg[i][1]=r;
        	points[l]+=1;
        	points[r+1]-=1;
        }
        int g=0;
        for(int i=1;i<=11;i++)
        {
        	g+=points[i];
        }
        int s=0;
        int[] bool=new int[n];
        ArrayList<Integer> ans=new ArrayList<>();
        for(int i=1;i<=200;i++)
        {
        	s+=points[i];
        	PriorityQueue<Pa> pq=new PriorityQueue<>();
        	if(s>k)
        	{
        		int req=s-k;
        		for(int j=0;j<n;j++)
        		{
        			if(bool[j]==1)
        				continue;
        			int l=seg[j][0];
        			int r=seg[j][1];
        			if(l<=i && i<=r) {
        			pq.add(new Pa(j,l,r,r-i));}
        		}
        		while(req!=0 && !pq.isEmpty())
        		{
        			Pa p=pq.poll();
        			s=s-1;
        			points[p.r+1]+=1;
        			ans.add(p.ind+1);
        			bool[p.ind]=1;
        			req--;
        		}
        	}
        }
        System.out.println(ans.size());
        for(int i=0;i<ans.size();i++)
        {
        	System.out.print(ans.get(i)+" ");
        }
        System.out.println();
    }
}
class Pa implements Comparable<Pa>
{
	int ind;
	int l;
	int r;
	int len;
	public Pa(int i,int l,int r,int len)
	{
		this.ind=i;
		this.l=l;
		this.r=r;
		this.len=len;
	}
	public int compareTo(Pa a)
	{
		return a.len-this.len;
	}
}