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 
#include <bits/stdc++.h>
using namespace std;
using ull = unsigned long long;
ull n, k, np = 0;
ull p[10000], l[10000], r[10000], s[10000], sp[10000];
bool loai[10000];
ull tim_s(ull pt) {
  ull mx = 0, pos = 0, ll = 0, rr = 0;
  for (int i = 0; i < n; ++i)
    if (s[i] > mx && l[i] <= p[pt] && r[i] >= p[pt] && loai[i] == false) {
      mx = s[i];
      pos = i;
      ll = l[i];
      rr = r[i];
    } else if (s[i] == mx && l[i] <= ll && r[i] >= rr && loai[i] == false) {
      mx = s[i];
      pos = i;
      ll = l[i];
      rr = r[i];
    }
  return pos;
}
ull tim_p() {
  ull mx, pos = 0;
  mx = 0;
  for (int i = 1; i <= np; ++i)
    if (sp[i] > mx) {
      mx = sp[i];
      pos = i;
    }
  return pos;
}
void capnhat() {
  for (int j = 0; j < n; ++j) {
    s[j] = 0;
    for (int i = 1; i <= np; ++i)
      if (p[i] >= l[j] && p[i] <= r[j] && sp[i] > 0) ++s[j];
  }
}
int main() {
  ull m = 0, pos, pt;
  bool ok;
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    cin >> l[i] >> r[i];
    loai[i] = false;
    ok = true;
    for (int j = 0; j < np; ++j)
      if (l[i] == p[j]) {
        ok = false;
        break;
      }
    if (ok) {
      ++np;
      p[np] = l[i];
    }
    ok = true;
    for (int j = 0; j < np; ++j)
      if (r[i] == p[j]) {
        ok = false;
        break;
      }
    if (ok) {
      ++np;
      p[np] = r[i];
    }
  }
  for (int i = 1; i <= np; ++i) {
    sp[i] = 0;
    for (int j = 0; j < n; ++j)
      if (p[i] >= l[j] && p[i] <= r[j]) ++sp[i];
  }
  for (int i = 1; i <= np; ++i)
    if (sp[i] > k)
      sp[i] -= k;
    else
      sp[i] = 0;
  capnhat();
  pt = tim_p();
  while (pt > 0) {
    ++m;
    pos = tim_s(pt);
    cout << pos + 1 << endl;
    loai[pos] = true;
    s[pos] = 0;
    for (int i = 1; i <= np; ++i)
      if (p[i] >= l[pos] && p[i] <= r[pos] && sp[i] > 0) --sp[i];
    capnhat();
    pt = tim_p();
  }
  cout << m << endl;
  for (int i = 0; i < n; ++i)
    if (loai[i]) cout << i + 1 << " ";
  cout << endl;
}
