Problem: You are given n points on the plane. You need to delete exactly k of them (k < n) so that the diameter of the set of the remaining n - k points were as small as possible. The diameter of a set of points is the maximum pairwise distance between the points of the set. The diameter of a one point set equals zero.

Input

The first input line contains a pair of integers n, k (2 ≤ n ≤ 1000, 1 ≤ k ≤ 30, k < n) — the numbers of points on the plane and the number of points to delete, correspondingly.

Next n lines describe the points, one per line. Each description consists of a pair of integers xi, yi (0 ≤ xi, yi ≤ 32000) — the coordinates of the i-th point. The given points can coincide.

Output

Print k different space-separated integers from 1 to n — the numbers of points to delete. The points are numbered in the order, in which they are given in the input from 1 to n. You can print the numbers in any order. If there are multiple solutions, print any of them.

Examples

Input

5 2
1 2
0 0
2 2
1 1
3 3


Output

5 2

Input

4 1
0 0
0 0
1 1
1 1


Output

3

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
int n, num;
int x[1111], y[1111], d[1111][1111], f[1111];
vector<int> ddd;
vector<int> b[1111];
bool dfs(int nw, int num) {
  if (nw == n) {
    return 1;
  }
  if (f[nw]) {
    return dfs(nw + 1, num);
  }
  for (int i = 0; i < b[nw].size(); i++) {
    num -= (!f[b[nw][i]]++);
  }
  if (num >= 0 && dfs(nw + 1, num)) return 1;
  f[nw] = 1;
  int t = num;
  for (int i = 0; i < b[nw].size(); i++) {
    num += (!--f[b[nw][i]]);
  }
  if ((--num >= 0) && num > t && dfs(nw + 1, num)) return 1;
  f[nw] = 0;
  return 0;
}
bool check(int dis) {
  for (int i = 0; i < n; i++) {
    f[i] = 0;
    b[i].clear();
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (d[i][j] > dis) {
        b[i].push_back(j);
      }
    }
  }
  bool xx = dfs(0, num);
  return xx;
}
int main() {
  cin >> n >> num;
  for (int i = 0; i < n; i++) {
    cin >> x[i] >> y[i];
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j <= n; j++) {
      int dis = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]);
      d[i][j] = d[j][i] = dis;
      ddd.push_back(dis);
    }
  }
  sort(ddd.begin(), ddd.end());
  int l = -1, r = ddd.size();
  int m;
  while (l < r - 1) {
    m = (l + r) / 2;
    if (check(ddd[m])) {
      r = m;
    } else {
      l = m;
    }
  }
  check(ddd[r]);
  for (int i = 0; i < n; i++) {
    if (f[i]) {
      cout << i + 1 << ' ';
      num--;
    }
  }
  for (int i = 0; i < n; i++) {
    if (!f[i] && num != 0) {
      cout << i + 1 << ' ';
      num--;
    }
  }
  return 0;
}