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;
using namespace rel_ops;
const double PI = acos((double)-1);
int ts, ts2, ts3, ts4;
int n, m;
long long gcd(long long x, long long y) {
  long long t;
  for (; y != 0;) {
    t = x % y;
    x = y;
    y = t;
  }
  return x;
}
long long sqr(long long x) { return x * x; }
template <class T>
void mn(T& x, T y) {
  x = min(x, y);
}
template <class T>
void mx(T& x, T y) {
  x = max(x, y);
}
int K, can, v[1005];
long long ds[1005][1005], x[1005], y[1005];
int lk[1005][1005], lk_[1005];
void work(int k, int shan) {
  if (shan > K) return;
  if (k > n) throw(1);
  int i, j;
  if (v[k]) {
    work(k + 1, shan);
    return;
  }
  int t1 = 0;
  for (i = 1; i <= lk_[k]; i++) (v[lk[k][i]] == 0 ? t1++ : 0), v[lk[k][i]]++;
  work(k + 1, shan + t1);
  for (i = 1; i <= lk_[k]; i++) v[lk[k][i]]--;
  v[k]++;
  if (t1 > 1) work(k + 1, shan + 1);
  v[k]--;
}
int chao[1000005], chao2;
void quchong() {
  sort(chao + 1, chao + chao2 + 1);
  int t1 = unique(chao + 1, chao + chao2 + 1) - chao - 1;
  chao2 = t1;
}
int check(int d) {
  int i, j, k, l, t1, t2, t3, t4, t5, t6, t7, t8, t9, t, nw;
  (memset((lk_), 0, sizeof((lk_))));
  (memset((v), 0, sizeof((v))));
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      if (ds[i][j] > d) {
        lk[i][++lk_[i]] = j;
      }
  try {
    work(1, 0);
  } catch (...) {
    return 1;
  }
  return 0;
}
int main() {
  int i, j, k, l, t1, t2, t3, t4, t5, t6, t7, t8, t9, t, nw;
  int tt1, tt2, tt3, tt4;
  double u1, u2, u3, u4, u5, u6, u7, u8, u9;
  char c1, c2, c3;
  srand((unsigned)time(0));
  cin >> n >> K;
  for (i = 1; i <= n; i++) cin >> x[i] >> y[i];
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      ds[i][j] = sqr(x[i] - x[j]) + sqr(y[i] - y[j]), chao[++chao2] = ds[i][j];
  quchong();
  int r = chao2;
  l = 1;
  for (; l <= r;) {
    int mid = chao[(l + r) / 2];
    if (check(mid))
      r = (l + r) / 2 - 1;
    else
      l = (l + r) / 2 + 1;
  }
  check(chao[l]);
  t1 = 0;
  for (i = 1; i <= n; i++)
    if (v[i]) t1++;
  for (i = 1; i <= n; i++)
    if (!v[i] && t1 < K) {
      t1++;
      v[i] = 1;
    }
  for (i = 1; i <= n; i++)
    if (v[i]) printf("%d ", i);
  return 0;
}